外部变量范围在javascript函数中不可用

时间:2014-11-26 11:21:00

标签: javascript parsing

如何访问内部javascript函数内部的外部变量,请检查下面的代码我需要访问" index" app()函数内的变量。

 function validate()
    {

    for (index = 0; index < results.length; index++) {
        var parsedData_1;
        var provider = results[index].get("provider");                          
        var user = results[index].get("user");          
        var addresses = user.get("addresses");

        var address = addresses[1];

        var GameScore = Parse.Object.extend("Address");
        var query = new Parse.Query(GameScore);         
        var data = JSON.stringify(address);     


        var parsedData = jQuery.parseJSON(data);            
        query.get(parsedData.objectId, {
        success: function(resultadr) {          

        var res = JSON.stringify(resultadr);
        var parsedData_1 = jQuery.parseJSON(res);   
        var apartment = parsedData_1.apartment;

        apa(apartment);

        },
        error: function(object, error) {            
        alert('error');             

        }
        });         

        function apa(apartment)
        {
        alert(index); [I'm not getting the index value inside this function]
        alert(apartment);

        }

    }

    }

在函数apa()里面我需要索引计数,但我无法得到它,请帮助如何访问函数内部的外部值。

5 个答案:

答案 0 :(得分:0)

据我所知,apa()无法访问索引变量,所以我将它放在函数调用的参数中,并像这样调用apa()

apa(apartment, index);

答案 1 :(得分:0)

问题是您正在使用闭包来访问索引,因此可以在app函数中访问指向该变量的最新值。例如,如果results.length equlas 11,app函数中的索引将始终为11。

soltion是在for循环中声明一个变量,将索引值赋给该变量,并将变量传递给app函数。

//Create a factory function for the app function
//Outside the for loop.

var createAppFunc = function (i) { 
    return function () { 
        console.log(i); 
    };
};
for (var index = 0, l = results.length; index < l; index++)
{
    var newVar = index;
    var app = createAppFunc(index); //Now, app is a function.
}

祝你好运:)。

答案 2 :(得分:0)

您可以使用Function.bind()将实际索引作为第一个参数传递给sucess-callback。在那里你可以得到它并将其作为参数传递给函数apa()。并且:使用关键字var作为for()中的索引。

function validate() {

    for (var index = 0; index < results.length; index++) {

        /* all the vars here */

        query.get(parsedData.objectId, {
            success: function(idx, resultadr) {
                var res = JSON.stringify(resultadr);
                var parsedData_1 = jQuery.parseJSON(res);   
                var apartment = parsedData_1.apartment;
                apa(idx, apartment);
            }.bind(null, index),
            error: function(object, error) {            
               alert('error');             
            }
        });

        function apa(index, apartment) {
            console.log(index); console.log(apartment);
        }

    }
}

bind()的第一个参数(此处为:null)设置绑定函数的context。无论您传入的是什么,都可以通过关键字this在成功回调中访问。

答案 3 :(得分:0)

我认为每次调用该函数时,调用都会受到下一个循环调用的影响..所以最后该方法只会被调用一次。

答案 4 :(得分:-1)

您可以全局声明索引变量,然后所有函数都可以访问它