对不起,关于标题 - 我找不出一个方法来描述它。当使用局部变量将匿名函数传递给命名函数时,Javascript中的作用域问题
这里的情景:
我有建立一个元素的功能:
buildSelect(id,cbFunc,...)
里面buildSelect它这样做:
select.attachEvent('onchange',cbFunc);
我也有去的数组:
var xs = ['x1','x2','x3'...];
鉴于所有这些,我有一些代码,这是否:
for(var i = 0; i < xs.length; i++)
{
buildSelect(blah,function(){ CallBack(xs[i],...) },...);
}
的问题是,当平变化得到这些选择的人开火。它正确地去回叫(),但第一个参数是不正确。例如,如果我改变第三个选择,我期望CallBack()被调用xs [2],而不是我得到一些不同的东西,如xs [3]或其他。
如果我修改稍微这样:
for(var i = 0; i < xs.length; i++)
{
var xm = xs[i];
buildSelect(blah,function(){ CallBack(xm,...) },...);
}
我还是回调得到不正确的值()。有些东西告诉我这是范围/关闭相关,但我似乎无法弄清楚什么。
我只需要第一个选择为onchange调用CallBack,第一个参数为xs [0],第二个选择为xs [1]依此类推。我在这里做错了什么?
我应该说明xs是一个全局变量。
感谢
谢谢!事实上,调用第二个函数有助于解决问题。 – encee 2011-02-17 04:06:18
@ royrules22:不客气。我会注意到你也可以利用你现有的`buildSelect`函数。只需传入`i`或`xs [i]`,然后在那里创建处理程序。 `buildSelect(blah,xs [i],...);`这可能是最干净的。 – user113716 2011-02-17 04:09:06