`
zoutm
  • 浏览: 96413 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

javascript 随笔

阅读更多

 

深入理解JS中的函数,对象,及类。

 

Js 高级应用

关于变量作用域

看下面一个例子都可以在全局命名空间内隐藏函数abc,哪个使用方式更好,为什么?

Example1:

var Base = {};

(function(){

    function abc(a){

       alert(a);

    }

    Base.show = function(a){       

       abc(a);

    }

})();

Base.show('ddd');

Base.show('sss');

 

Example2:

var Base = {};

Base.show=function(a){

    function abc(a){

       alert(a);

    }

    abc(a);

}

Base.show('ddd');

Base.show('sss');

变量的作用域

普通变量作用域

对象作用域链

 

一切都是对象

 

函数的本质

函数也是对象,函数拥有对象一切特性,Function是所有函数的构造函数,函数对象的常用方法:

Call(context,arguments);

Applay(context,arguments);

定义方式:

1.  function abc(x,y){return x+y}

2.  var abc = new Function(x,y,”return x+y;”);

3.  var abc = function(x,y){return x+y;}

函数的执行

abc(1,2);

abc.call(null,1,2);

abc.applay(null,[1,2]);

匿名函数

匿名函数就是没有名字的函数,通常使用在eventHandle,forEach,callBack中或其他一次性使用的场合。

定义函数:

function(){/*statement block*/}

使用场合

domNode.onclick = function(e){/*event handle block*/};

dojo.forEach([1,2,3],function(item){show(item)});

dojo.xhrGet{handleAs:’xml’,load:function(){},error:function(){}};

dojo初始化

匿名函数的特殊用处

改变变量作用域,常用来隐藏名字空间

Var Base={};

(function(){

  Var count = 0;

Function Base.getUniqueID(){

    Return count++;

}

})();

函数的属性:

length

指代函数的形式参数,与argumentslength不同,argumentslength是实参个数

prototype对象

构造函数名即类名

任何函数调用其实都是方法的调用

每个function都有prototype属性,所有function都具有该属性,如果该函数作为构造函数创建实例,这创建的实例拥有prototype对象的所有属性,这是js继承的关键。

认识this的本质

this可以出现任何地方,怎样辨别this究竟指代哪个对象,

this是函数运行时确定才向哪个对象,而函数的调用对象是函数在定义时确定的。函数的调用对象是一个对象链,

 

函数调用对象链

 

当函数在即将执行之前,初始化调用对象的属性,首先初始化形式参数,再扫描函数内具有function 声明的函数变量,然后再扫描var 声明的变量,具有相同名称的变量将后面覆盖前面的。但扫描var的变量时,只会在当前的调用对象上查看是否存在该属性,如果不存在,则增加该属性,并初始化为undefined,如果存在则忽略。只有在执行函数内的语句块时,赋值语句才有效,在执行函数阶段,函数的执行上下文则可以访问调用对象链上的所有属性,但嵌套函数内的调用对象如果有父函数调用对象相同属性,将屏蔽父调用对象属性。由于没有引用到调用对象,也没办法引用到调用对象链。

var f =(function(){

    return function(ss){

           ss();

       var ss = function(){

           alert('var define');

       }

       function ss(){

           alert('inner ss');

       };

       ss();

    };

})();

f(function(){alert('outer ss')});

 

var的真正意义,首先在当前函数的调用对象查找是否存在该属性,如果存在则不用定义该属性,否则定义该属性,但不会往父函数的调用对象上查找。

function a(){

       var ss="ss";

       return function(){

           var ss;

           alert(ss);

       }

    }

    var f=a();

    f();

1.  出现在全局空间

This在浏览器环境将指代window,在全局环境变量前加不加var是有区别的,如果前面加var,这该变量不会成为window的属性,否则都会成为window属性

2.  出现在构造函数(类)内

This代表该用该构造函数创建的instance.

3.  出现在方法内

This指代实例对象

严格意义上讲构造函数和方法与普通函数一样,都是函数对象,关键是看函数是怎么被使用的,请看下面例子

 

4.  奇怪的this现象

Function BaseClass(args){

This.name = args.name;

This.age = args.age;

};

BaseClass.prototype.show=function(){

Alert(this.name + “ age is ” + this.age);

}

Var s = new BaseClass({name:’tom’,age:30});

a.  s.show.apply({name:’Jack’,age:40});

b.  s.show.apply(null);

替换函数内的this指代

将方法变成普通函数

Dojo.hitch(context,method);

 

详解Eval

Eval的作用是执行一段js代码,并将该段代码的最后一个语句的执行结果作为返回值,在语句块中,不能有return关键字。Eval中的变量引用为eval执行的context 比如:

var a ="global";

(function (){

var a="local";

eval("alert(a)");

})()

eval("alert(a)");

当用ajax调用从服务器端取得js代码,想在全局环境内执行如何办?

var newEval = function(scriptFragment){

  return window.eval.apply(window,[scriptFragment]);

  }

Dojo.eval

 

Arguments的特殊用途

可以获取当前函数arguments.callee

Function abc(){

Var args=arguments;

Ss(args);

}

Function ss(args){

    Alert(args.callee);

}

JS对象属性的非对称性

类方法及属性

 

function MyClass(){

    this.seltF = function(){};

}

MyClass.prototype.shareF = function(){};

var a = new MyClass();

var b = new MyClass();

alert(a.seltF===b.seltF)

alert(a.shareF === b.shareF)

 

认识js中的命名空间

a.b.c.e = 1;

a = 1;

访问性能,路径越长越慢

 

为什么多个字符串相连接时先用数组保存再连接性能要高?

Var s = s1 + s2 + s3 + s4 + s5 + … +sn

总共需要创建多少个字符串对象 2n -1,如果使用数组则会创建n+1个字符串和一个数组对象,可以算算大概多少个字符串相加时用数组比较合算。

Js的继承树

js继承树

 

Var c1= Dojo.delegate(b1,{a:’s’,b:’f2’});

Js内存泄漏的主要原因及解决方案

 

多次hitch将没有效果,所以应该小心使用

  <script >

 hitch = function(context,f){

 return function(){

       return f.apply(context,arguments);

    }

 }

 function show(){

    alert(this.a);

 }

 myF1 = hitch({a:'1'},show);

 myF2 = hitch({a:2},myF1);

 myF1();

 myF2();

  </script>

 

setTimeout()的执行时机

  • 大小: 8.2 KB
  • 大小: 7.5 KB
分享到:
评论

相关推荐

    javascript学习随笔(编写浏览器脚本 Navigator Scripting )

    javascript学习随笔(编写浏览器脚本 Navigator Scripting ) javascript是一种脚本语言,经常用于浏览器脚本编写,可以嵌入HTML中,以两种方式:作为语句和函数使用时,使用SCRIPT标记;作为事件处理程序使用时,...

    Javascript 面试题随笔

    在这段文字中,主要介绍了一道JavaScript的面试题目,并且详细解释了这道题的原理和结果。在深入讨论这道题之前,首先需要了解一些基础的JavaScript知识,包括原型链(prototype chain)、函数对象、实例对象的属性...

    js随笔提示

    【标题】"js随笔提示"所涉及的知识点主要集中在JavaScript这一编程语言上,特别是关于用户交互和数据处理的部分。JavaScript是一种广泛应用于网页和网络应用的脚本语言,它允许实时更新网页内容,无需重新加载页面,...

    javascript学习随笔(使用window和frame)的技巧

    JavaScript中的`window`对象是浏览器环境中最核心的部分,它是所有其他JavaScript对象的顶级对象,包含了对浏览器窗口的各种操作。在JavaScript学习中,理解和熟练运用`window`对象是至关重要的。`frame`则是在一个...

    javascript开发随笔一 preventDefault的必要

    在JavaScript开发过程中,`preventDefault()` 是一个非常关键的方法,它用于取消事件的默认行为。在标题和描述中提到的情况,特别是在处理`&lt;a&gt;`标签作为按钮时,使用`preventDefault()`显得尤为重要,尤其是在老旧的...

    基于Java与跨平台技术的crostitch涂鸦随笔设计与实现源码

    本项目是一款基于Java和跨平台技术的crostitch涂鸦随笔设计与实现源码,包含65个文件,其中包括30个Java源文件、16个PNG图片文件、7个JavaScript文件、2个XML文件、1个Git忽略文件、1个Markdown文件、1个Maven项目...

    RegExp 随笔 JavaScript RegExp 对象

    有关正则表达式介绍,请阅读JavaScript指南中的正则表达式章节。 语法 文字和构造符号是可能的: /pattern/flags new RegExp(pattern [, flags]) 参数 pattern 正则表达式的文本 flags 如果指定,标志可以具有以下值...

    JavaScript中的字符串操作详解

    一、概述 字符串在...在这里,主要是介绍字符串本身的一些操作,正则表达式会在以后的随笔中涉及。 二、字符串的创建 创建一个字符串有几种方法。最简单的是用引号将一组字符包含起来,可以将其赋值给一个字

    javascript开发随笔二 动态加载js和文件

    在JavaScript开发过程中,随着项目的复杂度提升,对脚本的管理变得尤为重要。动态加载JS和文件是优化网页性能的关键技术之一。传统的静态引入方式,即通过`&lt;script&gt;`标签将多个JS文件添加到HTML中,可能导致页面加载...

    前端进阶 - 随笔.rar

    "前端进阶 - 随笔.rar"这个压缩包文件,显然是一份专为前端开发者准备的高级学习资料,旨在帮助他们提升技能并掌握更多实践技巧。从描述中的"前端日常进阶笔记"我们可以推测,这份资料可能包含了作者在日常工作和...

    dahong:个人技术随笔

    在这个随笔中,Dahong可能探讨了JavaScript的基础语法、函数、面向对象编程、闭包、原型链、异步编程(Promise、async/await)等主题,并分享了实际项目中的应用案例。 【CSS】是层叠样式表,用于描述HTML或XML...

    web随笔代码

    【标题】:“Web随笔代码”通常指的是与Web开发相关的代码片段、实验项目或教学示例,这些内容可能涵盖HTML、CSS、JavaScript等基础技术,也可能涉及到更高级的框架如React、Vue或Angular,以及后端开发技术如PHP、...

    工作随笔-记录遇到的知识点

    这篇工作随笔将主要探讨几个关键的前端知识点,涉及Vue框架、HTML/CSS样式以及JavaScript的实用技巧。 首先,我们关注输入框的边角弧度设置。在HTML中,我们可以利用CSS来改变input元素和textarea元素的外观。在...

Global site tag (gtag.js) - Google Analytics