let塊級作用域咋理解
不會變數提升
因此用let代替var宣告變數就可以把變數的作用域限制在當前的程式碼塊中
除了在value定義的程式碼塊,也就是condition為true的情況下,value是有值的
執行流離開if塊,value立即被銷燬,使用value值都會丟擲一個引用錯誤
2、禁止重宣告
無論另一個變數是用var還是let宣告的
同一作用域中不能用let重複宣告已經存在的識別符號,否則會丟擲一個語法錯誤
const宣告
用來宣告一個常量。它有以下特點:
1、不會變數提升
2、禁止重宣告
3、值一旦被設定後不可更改
否則丟擲語法錯誤
tips:常量如果是物件,那麼物件中的值可以修改
原因:const宣告不允許修改繫結,但允許修改值
4、必須初始化
否則丟擲語法錯誤,這是由特點3決定的
四、暫時性死區(Temporal Dead Zone,TDZ)
在let或const宣告之前訪問這些變數,會丟擲引用錯誤
原理:
JS引擎在掃描程式碼發現變數宣告時,要麼將他們提升至作用域頂部(遇到var宣告),要麼將宣告放到TDZ中(遇到let和const宣告)。訪問TDZ中的變數會觸發執行時錯誤。只有執行過變數宣告語句後,變數才會從TDZ中移出,然後才可正常訪問。
五、迴圈中的let宣告
同學們應該常常這樣寫for迴圈:
由於Hoisting,i的宣告提升到函式頂部,導致在循壞外部依舊可以訪問到i,輸出是10
在沒有ES6之前,由於這個特性,我們很難在迴圈中建立函式,看以下例子:
函式租後會輸出10次10,因為,i由於之前for迴圈裡的自增,已經變成了10。在forEach迴圈的時候,每次迭代都同時共享變數i。
這明顯與函式的本意不符!
為了解決這個問題,開發者們使用了立即執行函式(IIFE):
立即執行函式,顧名思義就是在函式定
原理是:let宣告每次迭代都會建立一個新變數,並以之前迭代中的同名變數的值將其初始化
-
熱水器屬於硬裝嗎
熱水器不屬於硬裝,硬裝是指固定的、不能移動的裝飾物,除了必須滿足的基礎設施以外,為了滿足房屋的結構、佈局、功能、美觀需要,新增在建築物表面或者內部的一切裝飾物也包括色彩,這些裝飾物原則上是不可移動的,主要包括電線,水管,隔牆,,房門,地板,瓷磚,櫥櫃,潔具,廚具,燈具等等...
-
大慶萬達幾點關門
21點。大慶市薩爾圖區大慶萬達廣場營業時間為週一到週日9點30分至21點,其中萬達影院為9點30分至23點。大慶薩爾圖萬達廣場,地處大慶市政務、商務中心,緊鄰被譽為“大慶長安街”的城市...
-
張萌是羅圈腿嗎
是。張萌1981年,三月六日出生於中國天津市,畢業於澳大利亞悉尼新南威爾士大學,中國內地女模特,演員,製片人,主持人,鋼琴教師以及歌手。...
-
csgo對槍應該走位還是站著不動
應該站著不動。因為csgo一邊走一邊開槍的彈道是模糊的,只有身體停止移動的時候彈道才是穩定的,彈道不穩就不能準確的瞄準命中敵人。拿部分衝鋒槍例如野牛可以一邊跑一邊打,因為子彈多可以形成火力壓制讓對方不敢露頭。...