闭包的应用场景

来源:互联网 发布:pp助手mac版工具箱 编辑:程序博客网 时间:2024/06/01 07:51

在ECMAScript中,闭包中的返回的语句会将控制流返回给上下文(调用者)

闭包的作用

1.保护函数内的变量安全

2.在内存中继续一个变量

例子:

function  fun1(){

var i = 0;

    function fun2(){

        alert(++i);

    }

return fun2;

}

var c = fun1();

c();

闭包产生的原因:

1.fun2在fun1内嵌套

2.fun2作为fun1的返回值被fun1返回


1.当定义函数fun1的时候,js解析器会将函数fun1的作用域设置为定义fun1的fun1所在的环境,如果fun1是一个全局函数,则scope chain只有windows对象。

2.当函数fun1执行的时候,fun1会进入相应的执行环境(exeution context)

3.在创建执行环境的过程中,首先会从fun1添加scope属性,即fun1的作用域 fun1.scope=a的作用域(scope Chain)

4.执行环境会创建一个活动对象(call Object),活动对象也是一个拥有属性的对象,但是他不具有原型而且不能通过javascript代码直接访问。创建完活动对象后,把活动对象添加到fun1的作用域的最顶端,此时fun1的作用域包含fun1的活动对象和window对象。

5.在活动对象上添加一个arguments属性,他保存访问fun1的时所传递的参数。

6.最后把函数fun1所有的参数和内部的函数fun2的引用也添加到fun1的活动对象上,在这一步需要完成fun2的定义,所有函数fun2的作用域也添加到fun1的的定义环境即fun1的作用域





0 0
原创粉丝点击