如果我以错误的角度来到这个街区,请告诉我.我有一系列功能,我想要启动,我希望能够将它们全部设置为循环.
for(var jj = 0; jj<monster.frames.length;jj++){
setTimeout(
functionName(jj),
1000*jj
);
}
Run Code Online (Sandbox Code Playgroud)
问题在于,当它functionName(jj)被执行时,它被传递的值在jj此时已被更改为最后一个循环迭代值.
Thi*_*ter 13
您需要确保内部函数为每次迭代都有一个新变量.最简单的方法是创建一个自动执行的匿名函数,该函数接收变量作为参数.您还需要修改调用函数的方式 - 现在您将返回值注册functionName(jj)为回调函数.只有当该函数实际返回一个函数时才会这样.
for(var jj = 0; jj<monster.frames.length;jj++){
(function(jj) {
setTimeout(
function() { functionName(jj); },
1000*jj
);
})(jj);
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用部分应用程序来创建新功能.但是,旧浏览器不支持,Function.prototype.bind因此您必须为其添加垫片.
for(var jj = 0; jj<monster.frames.length; jj++){
setTimeout(functionName.bind(this, jj), 1000*jj);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5400 次 |
| 最近记录: |