html5 - 用普通人能听懂的话回答什么是闭包
本文介绍了html5 - 用普通人能听懂的话回答什么是闭包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我一般都是说,创建一个动态存储空间,突破作用域的限制。让外部可以访问内部的变量,感觉自己答得没什么问题啊,为什么面试完没通知?
解决方案
其实闭包没有那么高深复杂。
仅从规范的角度:
function a() {
var x = 1, y = 2;
return function b() {
console.log(x + y);
}
}
var f = a();
f();
在执行
a
期间,我们可以认为它的局部变量存放在一个内部对象Env
里面,a
的执行环境保存了对Env
的引用。在定义
b
的时候,b
也会保存对Env
的引用。在
a
返回时,a
的执行环境被销毁,它对Env
的引用也就没有了。但是,只要b
还可以访问(比如,a
通过返回值返回了b
)。那么b
对Env
的引用仍然存在,它仍然可以访问Env
中保存的局部变量。将来在函数
b
执行期间,可以通过所谓的作用域链访问到x
和y
。
这就是闭包。
用图表示就是:
在函数
a
返回前:
在函数
a
返回后:
这篇关于html5 - 用普通人能听懂的话回答什么是闭包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文