ES6的let 與 const 的用法

2021-08-10 03:49:44 字數 2399 閱讀 1820

現在es6的**寫法越來越普及了,但具體在使用的過程中不有一些疑問,乙個具體的細節。就是let和const的區別使用。

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();

ES6的let與const命令

1.塊級作用域 乙個大括號 所包起來的內容就是乙個塊級作用域 let和const就是塊級作用域,2.嚴格模式 use strict 3.如果在同乙個塊級作用域中,let乙個變數不能重複使用,每乙個變數名只能被let一次,const也是這樣的。4.const定義的是乙個常量,這個常量不能被修改,但是如...

ES6新增的let與const

宣告常量,一旦宣告必須立馬賦值,否則報錯 const pi 3.14 const pi 報錯 uncaught syntaxerror missing initializer in const declaration 常量賦值以後,不能改變,否則同樣報錯 const pi 3.14 pi 3 報錯 ...

(ES6學習總結)let與const命令

let的特點大致總結有以下四點 1.只在命令的 塊內有效,即作用域只在塊級或子塊中有效 如 for let i 0 i 10 i uncaught syntaxerror identifier a has already been declared function foo args identif...