js闭包面试题

请看以下代码在输出台的输出情况

 

 

 

 

 

 

 

答案是4400,4401,4399,4400

 首先,test函数做了什么?test在自己的函数作用域内创建一个变量n,以及一个函数add,这时add就作为一个闭包,它可以在外部访问到test内部的变量n,并对其进行加法。然后test返回一个对象,这个对象有一个n变量以及一个add函数,n变量是test内部的变量n的一个缓存,而add则是test内部add的一个引用。

然后,我们执行了两次test,并把结果返回给两个变量result,result2,这两个变量所拥有的匿名对象是没有任何关联的,因此result2.add()执行的时候,和result.add()执行的情况一样,返回4400。然后result.add()再次执行,返回4401。需要注意的是,这里result.add()对变量n的改变,并不是对匿名对象内部的那个n进行改变,而是test内部的那个n,前面说过,add仅是对test内部函数的一个引用,它操作的n是和它次作用域相关的n。因此,当我们调用输出result.n的时候,这时候才是访问对象内部的n变量,返回的是未被操作的4399.

 

转载于:https://www.cnblogs.com/runhua/p/9598579.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值