如果有下面這段**,你覺得應該輸出什麼?
let i = 0
for(i = 0; i < 6; i++) , 0)
}
感覺上應該輸出 0,1,2,3,4,5
但它實際的輸出卻是 666666!
settimeout 代表忙完手頭的事之後,馬上執行 ***,關鍵在於手頭的事,是否改變了 i
因為迴圈先執行完,此時 i = 6,然後再執行 settimeout,所以就會輸出 666666
那如何才能輸出 0,1,2,3,4,5 呢?
js 給出的答案是把 let 寫在 for 裡面
for(let i = 0; i < 6; i++) , 0)
}
因為 js 在 for 和 let 一起用的時候會新增操作,每次迴圈都會把 i 複製乙份,留在這個空間
所以最後輸出的就是留在這個空間的 i,也就是 0,1,2,3,4,5 了
那還有沒有別的辦法輸出 0,1,2,3,4,5 呢?
讓我們試試 let 出現後,被遺棄的立即執行函式吧
let i = 0
for(i = 0; i < 6; i++) , 0)}(i)
}
每次迴圈定義乙個立即執行函式,並將 i 作為引數傳給這個函式,那輸出的值就不會隨著 i 的變化而變化了,因此輸出的結果自然就是 0,1,2,3,4,5 咯
js 網頁載入完畢,執行js函式
一般網頁載入完畢後,會馬上執行js,給按鈕,超連結等標籤設定多種行為,實現這樣的方式 dofunction firstfunction secondfunction 為js的三個函式 1 乙個函式 window.onload dofunction 2 多個函式 函式數量過多,會出錯 window.o...
jQuery和js頁面載入完成之後就執行的兩種方法
jquery載入頁面的方法 頁面載入完成就執行 建議大家看下windows.onload與 document ready之間的區別。1 function 2 document ready function 3 window.onload function html 為點選,且頁面需要引用jquery...
原生js封裝函式
原理是對元素的所有的子節點做乙個遍歷。然後做乙個判斷,如果是子元素節點 nodetype 1 則遍歷該子元素的所有的子節點,用遞迴檢查是否包含空白節點 如果處理的子節點是文字節點 nodetype 3 則檢查是否是純粹的空白節點,如果是,就將它從xml物件中刪除。1 function removew...