了解ES6的let屬性與var的區別
let的介紹與var的區別
1.var沒有塊級作用域,而let有塊級作用域
2.在js中只有function才有自己獨立的作用域
如果沒看懂:
舉個例子:
{var a=10}
console.log(a);
1.在網頁運行的時候a是可以直接列印的
2.如果將var換成let時
{let a=10}
console.log(a);

1.控制臺顯示a未定義,
2.這說明let有自己獨立的作用域,
3.既然有獨立的作用域,那么let就能替代函式解決函式閉包問題,
舉個例子:
我們用for回圈為5個按鈕系結監聽事件點擊每個按鈕列印對應的數字,
<body>
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
<button>5</button>
</body>
<script>
var btn=document.getElementsByTagName("button");//獲取所有button的一個串列
for(var i=0;i<btn.length;i++){
btn[i].onclick=function(){console.log(i+1);}
}
1.這樣寫的話我們不管點擊哪一個控制臺只會列印最后一個數字5,
2.前面的1234都被覆寫掉了,點那個按鈕都列印5
3.說明for的{ }是沒有塊級作用域的
以前的解決方式(函式閉包)
for(var i=0;i<btn.length;i++){
(function a(i){
btn[i].onclick=function(){console.log(i+1);}
})(i);
}
**
用一個立即執行函式給它閉包起來,然后將i的值傳進去,(不建議)
現在的解決方式(ES6的let:var的升級版)
直接將var 換成let
for(let i=0;i<btn.length;i++){
btn[i].onclick=function(){console.log(i+1);}
}
直接解決問題,簡單方便 (推薦!!!)
現在學習js的同學,可以養成寫let的相關,它也是var的完善版!!!!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/231595.html
標籤:其他
