标签:
js中万物皆对象,特殊的对象(function类型)在声明和执行的时候会发生一些奇妙的事情,如下:
function a(){ var id = 1; function b(){ alert(++i); } return b; } var c = a();
上述代码,是在全局作用域中声明了一个a
以函数a从定义到执行的过程为例阐述这几个概念。
再回到代码 var c = a(); 这时候把a()的返回值b函数指向c,然后c很神奇的可以访问到a的内部私有属性i了,这就是神奇的闭包了。
由于函数具有被调用时创建封闭环境的特性,因此在某些情况这种特性又被称为“闭包”;
(
闭包自我理解:
闭包应该是个抽象的概念,大概就是指function在执行时会创建的一个封闭环境,而这个环境只有他的内部函数可以访问。
换一种说法:内部函数只有通过闭包才能访问到外部作用域
关于闭包回收,应该是和其他对象一样,在没有被引用的情况下才会被回收。(即当内部函数被外部引用,在外部引用存活的情况下,闭包不会被回收)。
)
执行期还有一点需要补充的,就是new这个神奇的关键字。
当一个函数被普通的执行时,是这样的:
function a(){ var id = 1; return id; } function b(){ alert(hello); } var c = a(); //return 1; var d = b(); //return underfined; //如果有返回值得情况,则返回该返回值 //否则返回默认值underfined, return; 也是返回underfined
当一个函数被特殊的执行时,是这样的:
function a(){ this.id = 1; } a.prototype.name = "tianxia"; function b(){ alert(hello); return; } var c = new a(); //return {id:1,name:"tianxia"}; var d = new b(); //return underfined; //如果在一个函数前面带上new来调用该函数,那么将创建一个隐藏连接到该函数的prototype成员的新对象,同时this将被绑定到那个新对象上。 //默认返回该this对象,如果有返回值还是返回该返回值。
ps:好吧,又是记录了一些理论的东西,上文纯属一个小菜的个人理解,如果有问题,请多多指点哈。
标签:
原文地址:http://www.cnblogs.com/w2154/p/4231559.html