我知道以下的程式碼是錯的。因為vscode有報錯
for(var i = 0; i <= 10; i++){
setTimeout(()=>{
console.log(123)
},1000)
}
但是我依照網路上的方法,修改了一下程式碼。vscode的錯誤沒了。
for(let i = 0; i <= 10; i++){
setTimeout(()=>{
console.log(123)
},1000)
}
但是依舊沒有setTimeout的效果。就是沒有隔1秒顯示,而是1秒後全部顯示。
let timeout = (x) => {
console.log (123);
x ++;
if (x <= 10){
setTimeout (() => {timeout (x);}, 1000);
}
};
timeout (0);
迴圈會在一瞬間執行完
所以全部會一起一秒後執行 試試這個吧
for(let i = 0; i <= 10; i++){
setTimeout(()=>{
console.log(123)
},1000 * i)
}
你觀念錯了啊
for迴圈每一次花不到0.01秒就跑完
看起來就像是10次setTimeout一次跑完
你要每隔一秒輸出一次應該要改用setInterval
setInterval(()=>{
console.log(123)
},1000)
用此方法連迴圈都不需要
let time = 0
// 創建定時器
let temp = setInterval(()=>{
console.log(123)
time++
// 清除定時器
if(time == 10) clearInterval(temp)
},1000)
需要等待的話,我會使用以下方法供參考:
;(async () => {
const buildPromise = () =>
new Promise((resolve) =>
setTimeout(() => {
console.log(123)
resolve()
}, 1000)
)
for (let i = 0; i < 10; i++) {
await buildPromise()
}
})()
還有更多方法可以參考。
用closure的話,包一層function就解決。
for(var i = 0; i <= 10; i++){
(function(x) {
setTimeout(()=>{
console.log(x)
},1000);
})(i);
}