es6主要新增了const和let,用來宣告變數,但是let和const還是有一些不同的細節,
1.var、let、const的屬性區別:
| 宣告 | 變數提升 | 作用域 | 初始值 | 重復宣告 |
| var | 是 | 函式級 | 不需要 | 允許 |
| let | 否 | 塊級 | 不需要 | 不允許 |
| const | 否 | 塊級 | 需要 | 不允許 |
2.三個宣告變數提升:
console.log(a);//undefined
console.log(b);//報錯
console.log(c);//報錯
var a='黃三';
let b='黑小';
const c='張小';
這三個宣告的區別很明顯,因此let和const不支持變數提升,一般是要先宣告再使用,
3.三個宣告作用域:
var str1='科比';
let str2='詹姆斯';
const str3='喬丹';
if(1 + 1 == 2){
var str1='易建聯';
let str2='姚明';
const str3='朱芳雨';
console.log(str1,str2,str3);//易建聯,姚明,朱芳雨
}
console.log(str1);//易建聯
console.log(str2);//詹姆斯
console.log(str3);//喬丹
只有let和const有效避免變數覆寫,它們都是塊級作用域;var新變數覆寫了舊變數,函式作用域,
另外,塊級作用域不支持外部直接訪問內部,
if(1 + 1 == 2){
var str1='易建聯';
let str2='姚明';
const str3='朱芳雨';
console.log(str1,str2,str3);//易建聯,姚明,朱芳雨
}
console.log(str1);//易建聯
console.log(str2);//報錯,no defined
console.log(str3);//報錯,no defined
3.1 for回圈的作用域:
<body>
<!--快捷鍵:button{按鈕$}*5-->
<button>按鈕1</button>
<button>按鈕2</button>
<button>按鈕3</button>
<button>按鈕4</button>
<button>按鈕5</button>
<script>
var btns=document.querySelectorAll('button');
for(var i=0;i<btns.length;i++){
btns[i].onclick=function () {
alert('點擊了第'+i+'個');//點擊了第5個,5
}
}
</script>
</body>
var:每個按鈕為5個,點擊了每個按鈕都是列印“點擊了第五個”,這樣的話,絕對是不滿足開發者的需求,
<body>
<!--快捷鍵:button{按鈕$}*5-->
<button>按鈕1</button>
<button>按鈕2</button>
<button>按鈕3</button>
<button>按鈕4</button>
<button>按鈕5</button>
<script>
let btns=document.querySelectorAll('button');
for(let i=0;i<btns.length;i++){
btns[i].onclick=function () {
alert('點擊了第'+i+'個');//點擊了第0個到第5個,0,1,2,3,4
}
}
</script>
</body>
let:可以看到這樣的列印,只要每個點擊按鈕都列印為“點擊了N個按鈕”,這才是符合預期,
理解:在每一次回圈中,let都會重新宣告變數,因為let本身都是用塊級作用域,所以會記住回圈中上一次變數的值,只要是在自己的作用域情況下,回圈中每一個值都不會被覆寫掉,
所以推薦在for回圈的應用中直接使用let宣告,
4.初始值:
只有const宣告常量必須賦值,
//err
const name;
name='bbbb';
console.log(name);//報錯,因為常量沒有賦值
//good
const name='bbbb';
console.log(name);//bbbb
5.三個宣告重復宣告:
var name1='aaaa';
let name2='bbbb';
const name3='cccc';
name1 ='1111';
name2 ='2222';
name3 ='3333';
console.log(name1);//1111
console.log(name2);//2222
console.log(name3);//報錯,不能更改
var和let支持重復宣告,只有const不支持重復宣告,
另外,const 對于陣列和物件的元素可以修改,不算做對常量的修改,這樣不會報錯,
//陣列
const TEAM=['UZI','MXLG','Ming','Xiaohu']
TEAM.push('Meiko');//添加Meiko到陣列內
console.log(TEAM);//UZI,MXLG,Ming,Xiaohu,Meiko
//物件
const t={name:'黃小'};
t.name='黑小';
console.log(t);//黑小
為何要學習ES6的let和const?對于JavaScript是個弱型別,很好地提升它的性能,可以減少大多數奇怪的問題,現在大多數都使用let和const宣告變數,
以上就是這文章的內容了,不斷更新中.....給知識充電中,
歡迎各位大佬評論、點贊和收藏!Thanks
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/244304.html
標籤:其他
下一篇:自定義指令
