sho*_*osh 5 javascript closures anonymous-function
我想做以下事情:
for (var i = 0; i < 10; ++i) {
createButton(x, y, function() { alert("button " + i + " pressed"); }
}
Run Code Online (Sandbox Code Playgroud)
这个问题是我总是得到最终值,i因为Javascript的闭包不是按值.
那么我怎么能用javascript做到这一点?
如果您要编写使用JavaScript 1.7或更高版本的浏览器,则一种解决方案是使用let关键字:
for(var i = 0; i < 10; ++i) {
let index = i;
createButton(x, y, function() { alert("button " + index + " pressed"); }
}
Run Code Online (Sandbox Code Playgroud)
来自MDC Doc Center:
let关键字导致使用块级范围创建项变量,从而为for循环的每次迭代创建新的引用.这意味着为每个闭包捕获一个单独的变量,解决共享环境引起的问题.
查看MDC Doc Center以了解传统方法(创建另一个闭包).
for(var i = 0; i < 10; i++) {
(function(i) {
createButton(function() { alert("button " + i + " pressed"); });
})(i);
}
Run Code Online (Sandbox Code Playgroud)
请注意,JSLint不喜欢这种模式.它抛出"不要在循环中创建函数".
现场演示: http ://jsfiddle.net/simevidas/ZKeXX/
| 归档时间: |
|
| 查看次数: |
863 次 |
| 最近记录: |