闭包的应用场景

本文详细解释了JavaScript中闭包的概念及其工作原理。探讨了闭包如何保护函数内的变量安全,并通过实例展示了闭包如何维持变量的状态。文章还深入解析了闭包在函数作用域链中的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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的作用域





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值