JavaScript 闭包

//JavaScript闭包



var array = [1, 2, 3];



var funcs = new Array(3);



for (var i in array) {



    var tmp = array[i];



    funcs[i] = function () {



        return tmp;



    }



}



 



alert(funcs[0]());

 

会输出3!原因是JavaScript中函数中的所有变量声明作用域都是在整个函数中的。因此这个tmp就是这个函数域中的全局变量,当for循环运行完毕后,tmp就是3了。funcs数组中的所有函数对象返回值都会是3。

 

那么怎样解决JavaScript的这个问题呢?

我们可以利用另一个辅助函数来返回闭包函数。把原来函数域中的全局变量tmp传入到另一个函数中后,在这个函数中返回另一个函数来返回这个tmp变量(这句话有点绕推荐直接看下面代码)。这样做的意义是,之前函数中的tmp变量现在被局部化了。

完整代码:

//JavaScript闭包



function makeFunc(item) {



    return function () {



        return item;



    }



}



 



var array = [1, 2, 3];



var funcs = new Array(3);



for (var i in array) {



    var tmp = array[i];



    funcs[i] = makeFunc(tmp);



}



 



alert(funcs[0]());

 

这样就会输出1了!

 

你可能感兴趣的:(JavaScript)