所以我有這段代碼的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',這種行爲不會奇蹟般的改變。 –