带有相对变量的 JavaScript 回调函数

标签 javascript button callback

我不完全确定如何表达这个问题,但基本上,我有一个类,button,单击它时应该调用传递给它的函数。

button = function(...,callBack) {
    //...
    this._cb = callBack;
}
button.prototype.callBack = function(e) {
    //...
    this._cb();
}

然后到其他地方

//on canvas click
e.target.callBack(e);

(我希望这是适量的背景,如果需要的话我可以提供更多)

所以我遇到的问题是当我动态实例化按钮时,它们的回调使用数组中的数据。即

for (var i = 0; i < levels.length; i++) {
    buttons[buttons.length] = new button(..., function() {drawLevel(levels[i])});
}

然后,当它们被点击时,它们会运行该回调代码,并尝试为 i 找到一些随机值(可能是一个不使用 var 的 for 循环)并运行该级别。

我的问题是,我如何(不使用 eval)规避这个问题。

谢谢!

最佳答案

我不是 100% 清楚你在问什么,但看起来你会在循环中创建的匿名函数中得到错误的 i 值(它总是级别) .长度)

解决这个问题的方法是为创建的每个函数设置不同的作用域,每个作用域中的 i 是循环中 i 的副本

buttons[buttons.length] = new button(..., (function(i){ 
    return function() {drawLevel(levels[i])};
})(i));

关于带有相对变量的 JavaScript 回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18947205/

相关文章:

javascript - AngularJS 我正在尝试计算嵌套 ng-repeat 中包含的许多输入(ng-model)的结果

python - 在 tkinter 中从数组 Python 创建按钮

javascript - 获取按钮文本值以确定变量值

javascript - JQuery 错误的 ajax 完成回调被触发

android - 使用 twitter4j 回调登录

javascript - 仅运行一系列触发事件的最后一个事件

javascript - 在对数组应用 Array.reduce 时改变数组会产生什么后果

javascript - 正则表达式:在另一件事之前找到一件事之后的任何东西

asp.net - 奇怪的问题 - 无法将 javascript 分配给 linkbutton

javascript - ExtJS 4 在不使用回调的情况下等待 AJAX 请求的结果