您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“for循序為什么要用let”,內容詳細,步驟清晰,細節處理妥當,希望這篇“for循序為什么要用let”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
因為 var 是在 js 語言設計者 Brendan Eich 設計的一種缺陷,這種缺陷不能更改,并且作者在十年前就提出了修復此缺陷.
在進行講解的時候,小伙伴們需要知道在 js 語言中,if 和 for 是沒有作用域的,只有 function 才擁有,var 是全局變量,let 是塊級作用域,const 是常量(不可改變的變量稱為常量);可以把 let 看做成更完美的 var
//ES5中使用for循環點擊事件 //bug:每次點擊都是最后一個點擊按鈕觸發點擊
for(var i=0;i<btns.length;i++){
btns[i].addEventListener('click',function(i){
console.log(`第${i}按鈕發生點擊`);
})
}
//es5中for循環使用var定義的,就相當于定義了一個全局的i,每次循環i++都可以進行改變i的值,
//var進行變量提升和代碼預解析后var是在全局最前面的,es5的解決方案是采用閉包進行解決;
//解決方案
for(var i=0;i<btns.length;i++){
( function(num){
btns[i].addEventListener('click',function(i){
console.log(`第${num}按鈕發生點擊`);
})
})(i);
}
//函數具有塊級作用域,把當前每次循環的i通過閉包的方式傳遞給點擊事件,因為是立即執行函數,所以每次傳遞進去執行
//后,在開始下一輪循環,直到最后點擊事件循環完畢,雖然是使用var定義的i,但是i在改變前點擊事件通過閉包的方式
//傳遞進去并執行,直接把當前的i定義在當前函數作用域內
ES6循環
for(let i=0;i<btns.length;i++){
btns[i].addEventListener('click',function(i){
console.log(`第${num}按鈕發生點擊`);
})
}
//let具有塊級作用域的,每次循環時進去不會改變當前傳遞i的值,因為每次循環都是變量提升和代碼預解析
//都是把let提升到當前作用域的最前方
讀到這里,這篇“for循序為什么要用let”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。