一、let宣告變數
1.let宣告的變數不會掛在window中,不會造成全域性變數的汙染!
2.新增了乙個塊級作用域{},以前只有函式作用域,全域性作用域
3.let是不允許重複宣告
4.let不會有宣告提前(只是人為看到的效果,實際上是有宣告提前,提前臨時性的死區中:cannot access 『num』 before initialization)
二、var宣告變數
1.存在變數提公升機制,js引擎遇到var宣告,會將其宣告提到作用域頂端。
2.覆蓋全域性物件存在的變數(造成全域性汙染)
關於let和var的區別,從最經典的i值的問題上就可以看出來
用var宣告的i值輸出總為10,想要解決這個問題在es6以前有且只有一種方法,包裹乙個函式,產生作用域。es6後只需要使用let宣告i就可以解決這個問題。
能這樣解決的原因:
let宣告的 i 是區塊變數,每個 i 只能存活到大括號結束
var宣告的 i 是區域性變數,這個 i 的生命週期不會受for迴圈的大括號限制
三、const宣告常量
1.跟let完全相同 增加幾個點
2.不允許被修改(不允許改變記憶體空間的位址)
3.const宣告和賦值必須一次性完成,並且後期不允許改變儲存空間的位址
在大型公司中,對專案進行整改,將**從es5遷移到es6,能使用const就使用const,不能使用就用let。常量的效率比變數要高。
let var const的具體區別
if true console.log a a沒有被定義 這裡的乙個塊級作用域就是這if大括號內注意在定義變數的時候 無論是var,let還是const 都盡量都要先賦初始值,因為如果不賦初始值那麼undefined與任何數字進行加減乘除的時候結果都為nan 不了解變數提公升的小夥伴可以去 舉個例子...
let var const之間的區別
let是es6的新語法,用來區域性變數和var類似但是let只在 塊裡有效,也就是塊作用域 變數提公升是什麼意思這裡很多小夥伴會理解錯 var a 10 func function func 很奇怪這裡為什麼是undifined這就是變數提公升 上面的 等價於 var的變數提公升就是會先把var定義...
記憶體的使用 棧區 堆區 靜態區 唯讀區
記憶體的使用感覺好亂啊,需要整理一下!於是參考c primer與網上資源,整理如下 一 綜述 記憶體中的棧區分配的是區域性變數和函式的引數值的空間,棧的生長方向是從高往低的 堆區是向上增長的用於分配程式設計師申請的記憶體空間 比如new 申請的動態記憶體 注意它與資料結構中的堆是兩回事,分配方式倒是...