闭包

闭包就是能够读取其他函数内部变量的函数。由于在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变量,所以说是扩张
}
 

posted on 2016-01-26 11:38  迷茫小飞侠  阅读(114)  评论(0编辑  收藏  举报

导航