javascript匿名函数,可以访问创建者中的变量

时间:2014-02-12 20:46:57

标签: javascript lambda

我需要在success函数中从循环中访问i变量。我该怎么做?,我可以把它传递给函数吗?

function save(){
    var mods=model.things;
    for (i in mods) {
        var mod= mods[i];
        $.ajax({
            url: "duck"
            type: "put",
            data: JSON.stringify(mod),
            success: function(responce_json) {
                var j=i;   
            }
        });
    }
}

2 个答案:

答案 0 :(得分:3)

一种方式:

        success: (function(i) { return function(responce_json) {
            var j=i;   
        }})(i)

这使用立即调用函数表达式(IIFE)来创建一个闭包,该闭包将捕获i的当前值。

很明显,for...in被许多JavaScript programmers视为不良做法,但如果你需要使用它,你应该至少包括对hasOwnProperty的检查

答案 1 :(得分:1)

创建另一个function,将i作为参数,从而为每次迭代创建本地副本

var f = function(i) { 
    var mod= mods[i];
    $.ajax({
        url: "duck"
        type: "put",
        data: JSON.stringify(mod),
        success: function(responce_json) {
            var j=i;   
        }
    });
}
for (iter in mods) {
    f(iter);
}