子敬正在创造自己的人生
需求有轻重缓急,功能有可控不可控。 需求有版本有截止(否则会无休无止),功能不可控变为可控。 集中兵力消灭敌人有生力量,集中优势兵力消灭敌人有生力量。
//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了!

 

posted on 2014-02-12 13:45  silentjesse  阅读(182)  评论(0编辑  收藏  举报