徹底理解 let 與 const 的用法

2022-08-27 19:30:12 字數 2284 閱讀 6401

es6 新增了兩個宣告兩個宣告識別符號的方式: let 和 const。

其實我個人是沒有其他語言基礎的,第一次看到這兩個定義,瞬間懵逼有沒有。**塊是什麼鬼? 物理指標還能勉強理解。

console.log(a) // 報錯 a is not defined

也就是說 你只需要用 {} 包起來,這個 {} 就是乙個**塊。

好,接下來介紹下 let 的特性,使用 let 宣告的變數,只能在當前**塊中訪問和使用,有些類似於函式作用域,但是它又有幾點不同的地方。

function fn1()

fn1(); // 報錯

var b = 2;

function fn2()

fn2(); // 報錯

// 在es5 中如果想使用for迴圈每次的i需要使用閉包的特性

var arr = ;

for(var i=0; i<5; i++))

}arr[1]() // 5

arr[2]() // 5

arr[3]() // 5

arr[4]() // 5

/* 為什麼每次都是5,因為for迴圈每次做的事只是向陣列中存入乙個函式,這個函式的功能是 列印 i,但是函式並沒有立刻執行。而這個i是通過var i 這句話來宣告的。當for迴圈跑完,咱們都知道此時 i 的值是5。所以當你去執行函式的時候,自然列印出5.

*/

如果想使用每次迴圈中的i的值 可以利用es5的閉包:

var arr = ;

for(var i=0; i<5; i++)

})(i))

}arr[1]() // 1

arr[2]() // 2

arr[3]() // 3

// 以上寫法等價於下面這種寫法,注意引數i和形參i,此i非彼i

/* for(var i=0; i<5; i++))

})(i)

}*/

如果使用es6提供的let來宣告變數,那麼就會變得so easy

var arr = ;  // let arr =  都可以

for(let i=0; i<5; i++))

}arr[0]() // 0

arr[1]() // 1

arr[2]() // 2

一些朋友可能會覺得特別不適應。為什麼這樣就能彈出 0, 1, 2?其實需要注意個問題,就是這個let i = 0; 宣告的位置,是在 for的() 內,那麼你可以理解成,在 for 的內部 就定義了乙個 i 而且是使用 let 定義的。所以每次迴圈就相當於在當前迴圈的i值的前提下向陣列push的。

let i; 

for(i = 0; i < 5; i++),1000)

}

不同於:

for(let i = 0; i < 5; i++),1000)

}

const 除了不能改變物理指標的特性,其他特性和 let 一樣。

當宣告普通資料型別的時候,那麼一但宣告了,就不可以再改變。

const a = 1;

a = 2; //uncaught typeerror: assignment to constant variable.

當宣告複雜資料型別的時候,物理指標不可以改變,但是可以改變資料內的屬性值,以及可以給資料新增新屬性等操作。

const o = ;

o.a = 2;

o.b = 3;

console.log(o);

o = {}; // 報錯

最後還有乙個值得注意的問題:在es6中不存在函式提公升,算是修復了es5得乙個bug

看個例子:

// es5 

function a()

function fn()

}}fn(); // 無理由報錯 找不到a,個人認為很不合理!

// es6

"use strict"

function a()

function fn()

}}fn();

let 與 const 的區別

let命令,用來宣告變數時和var類似,但是只在let命令所在的 塊內有效,而var 是全域性有效。a referenceerror a is not defined.報錯,說明let宣告的變數只是在 塊內有效 b 2for let i 0 i 3 i console.log i reference...

var與const與let之間的區別

在es6下改var 為 let 或者 const var可以完全替換成 let 需要注意的是 let 與 const 區別並不大,let 是變數,const 是常量。只要定義的不會改變就用 const es6新增let和const兩個變數宣告命令,他們都具有如下特性 1 塊局作用域 2 不存在變數提...

let和const的區別

let和const的區別 let與const都是只在宣告所在的塊級作用域內有效 let用來定義變數,無論是不是嚴格模式下,宣告未初始化的時候,都不會報錯,和var作用一樣,返回undefined const用來定義常量,而且宣告時必須初始化,否則報錯 const不能修改定義的常量的值 但是可以修改常...