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

外部变量范围在javascript函数中不可用,javascript,parsing,Javascript,Parsing,如何访问内部javascript函数中的外部变量,请检查下面的代码,我需要访问app()函数中的“index”变量 function validate() { for (index = 0; index < results.length; index++) { var parsedData_1; var provider = results[index].get("provider");

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

 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);

        }

    }

    }
函数验证()
{
对于(索引=0;索引

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

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

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

apa(apartment, index);
//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.
}

问题是您使用闭包来访问索引,因此分配给该变量的最新值可以在app函数中访问。例如,如果results.length等于11,则应用程序函数中的索引将始终为11

解决方法是在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.
}
//为应用程序函数创建工厂函数
//在for循环之外。
var createAppFunc=函数(i){
返回函数(){
控制台日志(i);
};
};
对于(var index=0,l=results.length;index

祝您好运:)。

您可以使用
函数.bind()
将实际索引作为第一个参数传递给suces回调。在那里,您可以获取它并将其作为参数传递给函数
apa()
。并且:对
for()
中的索引使用关键字
var

函数验证(){
对于(var index=0;index

bind()
的第一个参数(此处为null)设置绑定函数的
上下文。您传入的任何内容都可以在成功回调中通过关键字
this

访问。我认为每次调用函数时,调用都会受到下一次循环调用的影响。。因此,该方法最后只会被调用一次。

为什么需要apa内部的索引?你不能以现在的方式访问它。我需要在apa()函数中创建一些动态ID,所以我需要它。这也不行,因为当
get
返回成功时,因为循环已经完成。我需要测试它,但我认为var I=index;apa(公寓,i);每次在函数apa()中获取索引的最后一个计数值时,如何传递正确的值?如果索引计数0意味着我需要将0传递给apa()。谢谢你的提醒。我没有提到这一点,请稍等片刻编辑我的回答抱歉@Oday它不起作用,我不想将app()函数置于循环之外,因为我会在其中传递许多参数。感谢您的回复:)@ManoharSingh您的应用程序功能仍在For循环中,并存储在应用程序variable中。for循环之外的是app函数的工厂。我还测试了代码,它的工作原理是索引值在app函数的所有实例中都可用。