我所理解的闭包

闭包最主要概念:有权访问另一个函数作用域内变量的函数

 当前函数执行会形成一个私有上下文,当前私有上下文内成员被外部函数成员占有,此私有上下文不会被释放,则形成闭包

function add(){
     var result;
    result = function(x,y){
          return y+x     
    }   
    return result             
}

var sum = new add();
console.log(sum(10,20))/*30*/

 

在函数内访问某个变量是根据函数作用域链来判断变量是否存在,而函数作用域链是程序根据函数所在的执行环境栈来初始化的。

https://www.jianshu.com/p/26c81fde22fb

 

函数会执行的主要原因就在于()

function createFunctions(){
    var result = new Array();
    for (var i=0; i < 10; i++){
         result[i] = function(){
                  return i;
        };
               
    }
    return result;
}
var funcs = createFunctions();

for (var i=0; i < funcs.length; i++){
     console.log(funcs[i]());
}
/*打印出10个10*/

原因在于返回的函数都引用了变量i,但它并非立即执行,等到函数都返回是i=10

function createFunctions(){
     var result = new Array();
    for (var i=0; i < 10; i++){
        result[i]=(function(num,count){
            return function (){
                return num+count
             }
         })(i,3)
    }
    return result;
}
var funcs = createFunctions();

for (var i=0; i < funcs.length; i++){
     console.log(funcs[i]());
}
/*正确打印1-10*/

内部有立即执行函数,也就是()执行环境

 

posted @ 2018-08-31 09:43  yewook  阅读(117)  评论(0编辑  收藏  举报