js的闭包(二)——闭包的机理之我见

来源:互联网 发布:阿里云华东 编辑:程序博客网 时间:2024/06/18 16:02

理解闭包就要明白闭包的过程。假设闭包有外函数和内函数。
先引入两个名词:
作用链域活动对象
很多人看到这两个词会比较紧张。我通俗点理解(不知道对不对):活动对象就是指当前函数执行中可以操作的变量,作用域链就是指向这样组变量的指针。可能这么说你还是比较蒙。我们先不用理会它们。
闭包的机理就是内函数执行时,只销毁了外函数的作用域链而将它的活动对象保存了下来。说白了就是只销毁了钥匙而并没有销毁屋里的东西。
作为初学者,我有个感悟和大家分享。就是要明白一个函数的过程。函数的过程可以分为:创建,调用,销毁。函数的名称仅仅是指向函数的一个指针!
下面看一个例子来理解一下函数的创建与调用的区别(话说我真的理解了好久):

function outer(){    var result = new Array();    for (var i=0;i<10;i++){        result[i] = function(){            return i;        }    }    return result;}

这个例子是闭包中一个经典的例子,看过书的人都知道结果会是返回的都是10。但却不好理解。这就是我上面说的,在for循环里面的都是函数声明,它没有立即执行。当我们创建outer后,它建立了活动环境之后,内函数才可以执行。此时i变量的值已经为10了。

0 0
原创粉丝点击