var、let 及 const 区别
生活随笔
收集整理的這篇文章主要介紹了
var、let 及 const 区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
var
console.log(a) // undefinedvar a = 1從上述代碼中我們可以發現,雖然變量還沒有被聲明,但是我們卻可以使用這個未被聲明的變量,這種情況就叫做提升,并且提升的是聲明。
對于這種情況,我們可以把代碼這樣來看
接下來我們再來看一個例子
var a = 10var aconsole.log(a) 對于這個例子,如果你認為打印的值為undefined那么就錯了,答案應該是10,對于這種情況,我們這樣來看代碼var avar aa = 10console.log(a) 到這里為止,我們已經了解了var聲明的變量會發生提升的情況,其實不僅變量會提升函數也會被提升。 console.log(a) // ? a() {}function a() {}var a = 1 對于上述代碼,打印結果會是? a() {},即使變量聲明在函數之后,這也說明了函數會被提升,并且優先于變量提升。 說完了這些,想必大家也知道var存在的問題了,使用var聲明的變量會被提升到作用域的頂部。接下來我們再來看let和const
1 var a = 1 2 let b = 1 3 const c = 1 4 console.log(window.b) // undefined 5 console.log(window. c) // undefined 6 7 function test(){ 8 console.log(a) 9 let a 10 } 11 test()首先在全局作用域下使用let和const聲明變量,變量并不會被掛載到window上,這一點就和var聲明有了區別。
再者當我們在聲明a之前如果使用了a,就會出現報錯的情況, a is not defined
首先報錯的原因是因為存在暫時性死區,我們不能在聲明前就使用變量,這也是let和const優于var的一點。然后這里你認為的提升和var的提升是有區別的,雖然變量在編譯的環節中被告知在這塊作用域中可以訪問,但是訪問是受限制的
總結
- 函數提升優先于變量提升,函數提升會把整個函數挪到作用域頂部,變量提升只會把聲明挪到作用域頂部
- var存在提升,我們能在聲明之前使用。let、const因為暫時性死區的原因,不能在聲明前使用
- var在全局作用域下聲明變量會導致變量掛載在window上,其他兩者不會
- let和const作用基本一致,但是后者聲明的變量不能再次賦值
2019-03-02? 19:28:08
?
轉載于:https://www.cnblogs.com/chailuG/p/10462526.html
總結
以上是生活随笔為你收集整理的var、let 及 const 区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hihocoder-Week243-hi
- 下一篇: 伪分布式hbase数据迁移汇总