JavaScript 匿名函数的参数

发布于 2024-09-04 21:39:06 字数 270 浏览 8 评论 0原文

for (var i = 0; i < somearray.length; i++)
{
    myclass.foo({'arg1':somearray[i][0]}, function()
    {
        console.log(somearray[i][0]);
    });
}

如何将某个数组或其索引之一传递到匿名函数中? somearray 已经在全局范围内,但我仍然得到 somearray[i] 未定义

for (var i = 0; i < somearray.length; i++)
{
    myclass.foo({'arg1':somearray[i][0]}, function()
    {
        console.log(somearray[i][0]);
    });
}

How do I pass somearray or one of its indexes into the anonymous function ?
somearray is already in the global scope, but I still get somearray[i] is undefined

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

递刀给你 2024-09-11 21:39:06

匿名函数中的 i 捕获变量 i,而不是它的。在循环结束时,i 等于 somearray.length,因此当您调用该函数时,它会尝试访问不存在的元素数组。

您可以通过创建一个捕获变量值的函数构造函数来解决此问题:

function makeFunc(j) { return function() { console.log(somearray[j][0]); } }

for (var i = 0; i < somearray.length; i++)
{
    myclass.foo({'arg1':somearray[i][0]}, makeFunc(i));
}

makeFunc 的参数本来可以命名为 i,但我将其称为 j< /code> 以表明它是与循环中使用的变量不同的变量。

The i in the anonymous function captures the variable i, not its value. By the end of the loop, i is equal to somearray.length, so when you invoke the function it tries to access an non-existing element array.

You can fix this by making a function-constructing function that captures the variable's value:

function makeFunc(j) { return function() { console.log(somearray[j][0]); } }

for (var i = 0; i < somearray.length; i++)
{
    myclass.foo({'arg1':somearray[i][0]}, makeFunc(i));
}

makeFunc's argument could have been named i, but I called it j to show that it's a different variable than the one used in the loop.

冷弦 2024-09-11 21:39:06

闭包怎么样:

for (var i = 0; i < somearray.length; i++) {
    var val = somearray[i][0];
    myclass.foo({'arg1': val}, function(v) {
      return function() {console.log(v) };
    }(val) );
}

How about a closure:

for (var i = 0; i < somearray.length; i++) {
    var val = somearray[i][0];
    myclass.foo({'arg1': val}, function(v) {
      return function() {console.log(v) };
    }(val) );
}
滥情稳全场 2024-09-11 21:39:06
for (var i = 0; i < somearray.length; i++)

{
    myclass.foo({'arg1':somearray[i][0]}, function(somearray)
    {
        console.log(somearray[i][0]);
    });
}

然后在方法 foo 中使用参数调用匿名函数。

for (var i = 0; i < somearray.length; i++)

{
    myclass.foo({'arg1':somearray[i][0]}, function(somearray)
    {
        console.log(somearray[i][0]);
    });
}

And then in method foo call anonymous function with param.

剑心龙吟 2024-09-11 21:39:06

您可以使用回调将变量值传递给烦人的函数,

myclass.foo(function(variable){
      return function(){
        console.log(variable);
      }
    })(variableValue);
);

检查这篇文章: https://shahpritesh.wordpress.com/2013/09/06/javascript-function-in-loop-passing-dynamic-variable-value/

You can pass variables values to annoymous function by using callback,
something like

myclass.foo(function(variable){
      return function(){
        console.log(variable);
      }
    })(variableValue);
);

check this post: https://shahpritesh.wordpress.com/2013/09/06/javascript-function-in-loop-passing-dynamic-variable-value/

朦胧时间 2024-09-11 21:39:06

所有函数/方法只能用作回调。当您调用回调函数时,您将变量传递给它。

var myclass = {
  foo: function(params, callback){
    // do some stuff
    callback(variable1, variable1, variableN);
  }
}

All the functions/methods can be used as callbacks only. When you call the callback function you pass variables to it.

var myclass = {
  foo: function(params, callback){
    // do some stuff
    callback(variable1, variable1, variableN);
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文