标签:
先看看函数定义时发什么什么?
函数定义时就确定了其作用域和作用域链。
执行时创,无法访问建执行环境(execution),执行时相当于实例化了一发。除了执行环境当然有作用域链,这时会将实例化的对象(也就是活动对象推入顶端,就是第0号位置),其他的作用域链继承定义时的作用域链。
红皮书中是这样写的:执行环境定义了变量和函数有权访问其他数据,决定他们各自行为。每个执行环境中都有一个变量对象,环境中定义的变量和函数都保存在这个对象中,无法访问。
当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的最前端始终是当前执行代码所在环境的变量对象。如果这个环境是函数,将其活动对象作为变量对象。
活动对象最初只包含一个对象:arguments对象。
偶然还看到了JS中没有块级作用域这个概念。
实现这个样子的
for(var i=0;i<10;i++){ //dosth(i); } console.log(i);
这个会出来10的!!!! fuck 执行完这个i 也会出现在循环外的执行环境中 真是日了动物园。由此应该很能简单的理解那个闭包经典例子。
function closure(){ var arr=new Array(); for(var i=0;i<10;i++){ arr[i]=function(){ return i; }; } return arr; }
然而书上说运出来是 十个10
搞不懂了 先扔这里。
下面来看看闭包的概念啊
又来抄书了
红皮书上是这什么说的:有权访问其他函数作用域中变量的函数。
闭包创建方式:在一个函数内再创建一个函数。
在一个函数内部定义的函数会将外部函数的活动对象添加到他的作用域链中。
外部函数返回后,作用域链会被销毁,但内部函数仍在引用其活动对象,活动对象不会被销毁。
差不多好像就这些 这篇博客比较详细
http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html
下篇整理下对原型的理解。
标签:
原文地址:http://www.cnblogs.com/liuestc/p/4658627.html