let
- 一、let
- 二、const
- 三、臨時死區
- 四、回圈中let和const的使用
- 五、let、const、var 的區別
在ES5中,我們通常用var宣告變數,但是在JavaScript中用’var'來宣告變數會出現變數提升的情況,即通過"var"宣告的變數,系統都會把宣告隱式的升至頂部,這樣的特性往往會讓剛接觸JavaScript及習慣其他語言的開發人員不適應,導致程式出現問題,所以ES6就給我們新增了兩種新的宣告格式,用于補全ES5標準中var宣告變數的不足:即let和const,就來具體看一下:
一、let
(1)let宣告的變數只在所處于的塊級有效,
if (true) {
let a = 10;
}
console.log(a) // a is not defined
列印結果為:

注意:使用let關鍵字宣告的變數才具有塊級作用域,使用var宣告的變數不具備塊級作用域特性,
(2)let宣告的變數不存在變數提升,
console.log(a);
let a = 20;
列印結果為:

二、const
作用:宣告常量,常量就是值(記憶體地址)不能變化的量,
(1)具有塊級作用域,
if (true) {
const a = 10;
}
console.log(a) // a is not defined
列印結果為:

(2)宣告常量時必須賦值,
const PI; // Missing initializer in const declaration
列印結果為:

(3)常量賦值后,值不能修改,
const ary = [100, 200];
ary[0] = 'a';
ary[1] = 'b';
console.log(ary); // ['a', 'b'];
ary = ['a', 'b']; // Assignment to constant variable.

三、臨時死區
let和const都是塊級識別符號,所以let和const都是在當前代碼塊內有效,常量不存在變數提升的情況,但是通過let和const宣告的常量,會放在臨時死區(temporal dead zone),如下:
{
console.log(typeof a);
let a = 10
}
列印結果為:

即使通過安全的typeof運算子也會報錯,原因是JavaScript引擎在掃描代碼變數時,要么會把變數提升至頂部,要么會把變數放在臨時死區,這里通過let宣告的’a'變數會被放在臨時死區,所以在宣告之前列印就會報錯,
四、回圈中let和const的使用
(1)在ES5標準中,for回圈中的回圈變數都是通過var來宣告的,由于var沒有獨立的作用域,導致在回圈中創建函式時會出現結果和思路不一致的情況,如下:
let funArr = []; //該陣列中存放的是函式
for(var i=0;i<5;i++) {
funArr.push(function(){
console.log(i)
})
}
funArr.forEach(item=> {
item()
})
列印結果為:

回圈結果不是預想的0,1,2,3,4而是5個5,這是因為var宣告在回圈中作用域共用,并且會把i保存在全域作用域中,要解決回圈中保存函式的問題,可以利用閉包創建獨立的作用域,代碼如下:
let funArr = [];
for(var i=0;i<5;i++) {
(
function(i) {
funArr.push(function(){
console.log(i)
})
}
)(i)
}
funArr.forEach(item=> {
item()
})
列印結果為:

這樣通過自執行函式就可以解決回圈中創建函式的問題,但利用ES6中let和const提供的快級作用域可以讓代碼更簡潔:
let funArr = [];
for(let i=0;i<5;i++) {
funArr.push(function(){
console.log(i)
})
}
funArr.forEach(item=> {
item()
})
在for-in或for-of回圈中使用const時,方法與let一致:
let obj = {
name: '張三',
age: 20
}
for(const i in obj){
console.log(i) //輸出name、age
}
let arr = ['張三','李四','王五']
for(const value of arr){
console.log(value) //輸出張三、李四、王五
}
列印結果為:

五、let、const、var 的區別
-
使用
var宣告的變數,其作用域為該陳述句所在的函式內,且存在變數提升現象, -
使用
let宣告的變數,其作用域為該陳述句所在的代碼塊內,不存在變數提升, -
使用
const宣告的是常量,在后面出現的代碼中不能再修改該常量的值,

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