关于JavaScript中,函数闭包的问题

基本概念:函数在执行的时候,会创建一个活动对象(activecontext),里面有一个scope,包含当前函数里的变量,对象。这些对象在函数执行完毕之后销毁(前提是没有... 基本概念:函数在执行的时候,会创建一个活动对象(active context),里面有一个scope,包含当前函数里的变量,对象。这些对象在函数执行完毕之后销毁(前提是没有闭包)。
但如果此函数中存在另一个函数产生了闭包,那么内部函数就拥有且【独享】了这个对象。知道闭包函数执行完毕,此执行上下文对象才会被销毁。并且,由于是【独享】的这个对象,所以其他内部的闭包函数对外层函数scope 上下文的修改不会影响到另一个闭包函数。
测试代码:

运行结果:

图1 和 图2 的测试代码,完全例证了上面的结论。

但是,下面的代码,则并没有体现出上面文字所描述出来的理论。

3个闭包函数 get(),set(),increment()里对i的修改是相互影响的。i在闭包函数里又不是【独享】的状态?

我对闭包、活动上下文(active context)和【scope独享】理解错了吗?
展开
 我来答
src_sc001
2015-10-30 · TA获得超过139个赞
知道小有建树答主
回答量:205
采纳率:100%
帮助的人:90.7万
展开全部
对于里面三个函数,你的i是外部全局变量
js44852410
2015-10-26 · TA获得超过101个赞
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:67.1万
展开全部
这应该是基本数据类型与引用数据类型的变量的区别吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
荒天浪子
2015-10-26
知道答主
回答量:13
采纳率:0%
帮助的人:1.4万
展开全部
i对于三个闭包函数来说就是全局变量,这就是我的理解。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式