您的位置:首页 > 其它

闭包

2016-01-26 11:38 204 查看
闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。当一个函数初始化的时候会把他的执行上下文记录在内部变量[[scope]]里,当函数被调用时,一个新的执行上下文对象产生,先复制他的scope,然后把目前的上下文塞进去。

使用闭包很多时候是为了保留特定的执行上下文。

var myobject = (function() {
var value = 0;
return {
setValue: function(x) {
value += x;
},
getValue: function() {
return value;
}
}
})();

注意最后一行的 () ,
并不是将一个函数赋给myobject ,而是将调用该函数后的返回的对象赋值给它。
在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

拓展scope chain
with,和catch可以拓展作用域链scope chain,也就是在这两个表达式的代码里会产生various object,但是比较特别:
function buildUrl() {
var qs = “?debug=true”;
with(location){
var url = href + qs;
}
return url; //这里在with块外面,但是仍然保留了URL变量,所以说是扩张
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: