【问题标题】:javascript anonymous function with access to variable in creatorjavascript匿名函数可以访问创建者中的变量
【发布时间】:2014-03-11 10:40:20
【问题描述】:

我需要在成功函数中从循环中访问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;   
            }
        });
    }
}

【问题讨论】:

标签: javascript lambda


【解决方案1】:

一种方式:

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

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

顺便说一句,for...in 被很多 JavaScript programmers 认为是不好的做法,但如果你需要使用它,你可能至少应该检查hasOwnProperty

【讨论】:

  • 我选择了不同的答案,因为我可以阅读代码。但是对于for…in 的评论 +1,你能告诉我替代方案吗?
【解决方案2】:

创建另一个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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多