关于JavaScript中,函数闭包的问题
基本概念:函数在执行的时候,会创建一个活动对象(activecontext),里面有一个scope,包含当前函数里的变量,对象。这些对象在函数执行完毕之后销毁(前提是没有...
基本概念:函数在执行的时候,会创建一个活动对象(active context),里面有一个scope,包含当前函数里的变量,对象。这些对象在函数执行完毕之后销毁(前提是没有闭包)。
但如果此函数中存在另一个函数产生了闭包,那么内部函数就拥有且【独享】了这个对象。知道闭包函数执行完毕,此执行上下文对象才会被销毁。并且,由于是【独享】的这个对象,所以其他内部的闭包函数对外层函数scope 上下文的修改不会影响到另一个闭包函数。
测试代码:
运行结果:
图1 和 图2 的测试代码,完全例证了上面的结论。
但是,下面的代码,则并没有体现出上面文字所描述出来的理论。
3个闭包函数 get(),set(),increment()里对i的修改是相互影响的。i在闭包函数里又不是【独享】的状态?
我对闭包、活动上下文(active context)和【scope独享】理解错了吗? 展开
但如果此函数中存在另一个函数产生了闭包,那么内部函数就拥有且【独享】了这个对象。知道闭包函数执行完毕,此执行上下文对象才会被销毁。并且,由于是【独享】的这个对象,所以其他内部的闭包函数对外层函数scope 上下文的修改不会影响到另一个闭包函数。
测试代码:
运行结果:
图1 和 图2 的测试代码,完全例证了上面的结论。
但是,下面的代码,则并没有体现出上面文字所描述出来的理论。
3个闭包函数 get(),set(),increment()里对i的修改是相互影响的。i在闭包函数里又不是【独享】的状态?
我对闭包、活动上下文(active context)和【scope独享】理解错了吗? 展开
3个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询