我希望在延迟10毫秒后打印0到9的值而不形成任何其他命名函数。
function ClosurePrint(){
for(i=0;i<10;i++){
setTimeout(function(){
document.writeln(function(y){
return y;
})(i);
},10);
}
}
ClosurePrint();
目前正在打印:
function(y) { return y }
答案 0 :(得分:2)
您正在将函数reference
传递给document.write,这将导致打印primitive
值。{您可以使用setTimeout
的第3个参数将其用作传递函数的参数。
不需要通过每次迭代创建一个范围来处理闭包问题。
function ClosurePrint(){
for(i=1;i<=10;i++){
setTimeout(function(i){
document.writeln(i)
},1000 * i, i);
}
}
ClosurePrint();
我没有像您在样本中使用的document.write
那样使用console.log
。我使用过closure
。按F12查看控制台。
通过处理IIEF
问题,您可以使用function ClosurePrint(){
for(i=1;i<=10;i++){
(function(i){
setTimeout(function(){
document.writeln(i);
},1000 * i);
})(i);
}
}
ClosurePrint();
,
onLoad