所以我有这段代码的setTimeout不工作...当关闭包含
var string = 'qwe';
document.addEventListener('click', function(e){
function bar(b){
var a = string[b];
if (a == 'q') {
console.log('first');
}
if (a == 'w') {
console.log('second');
}
if (a == 'e') {
console.log('third');
}
}
setTimeout(bar(0), 1000);
});
问题是的setTimeout不起作用。代码在单击后执行。
这很奇怪,因为如果我避免使用闭合,它的工作原理...
setTimeout(function bar(){
var a = string[0];
//...everything else
},1000);
但是,这可能会使代码凌乱/多余的,因为我打算做3次。理想情况下,工作代码是...
setTimeout(bar(0), 1000);
setTimeout(bar(1), 2000);
setTimeout(bar(2), 3000);
但同样,这样的设置超时不适合某些原因:/任何想法,为什么?
使用'的setTimeout(()=>酒吧(0) ,1000)'排队一个函数。您只需排列函数的**结果**。 – Sirko
您立即执行该功能。 '巴(0)'。具有讽刺意味的是创建一个闭包会有所帮助,但在这里你只是做了一个简单的函数 – Keith
给定'foo(bar())','bar'总是先执行,其返回值传递给'foo'。对于'setTimeout',这种行为不会奇迹般的改变。 –