let, const 和var的區別

2021-09-19 14:10:02 字數 2230 閱讀 3312

總體來說,varlet的區別就是作用域的不同。

constlet是相同作用域,區別就是不可被重新賦值。

var a =10;

console.

log(window.a)

;// 10

let b =10;

console.

log(window.b)

;// undefined

const c =10;

console.

log(window.c)

;// undefined

作用域就是可以 訪問到這個變數的範圍。

如果var定義在function外面,則作用域是全域性的,如果定義在function裡面,var的作用域是function。

letconst定義的變數的作用域都是包裹著它的大括號裡的**塊。並且,letconst定義的變數不會被hoisting

function

funcvar()

console.

log(tmp)

;// 123

}function

funcconst()

// <--這裡結束

console.

log(tmp)

;// referenceerror: tmp is not defined

}

let x =10;

if(x ==10)

// <-- 出了這個塊,裡面的x就沒了

console.

log(x)

;// 10 -- 外面的x

let x =10;

if(x ==10)

// <--這裡面並沒有定義x,所以改變的是外層的x,

console.

log(x)

;// 20

在js中,可以在變數定義之前使用變數,因為變數的定義會被提到作用域最頂上(看上去的定義的位置其實只是賦值)。這個過程叫做hoisting。

而用let和const定義的變數並不會被hoisting。

function

testvar()

function

testlet()

下面的**中,var的作用域是全域性的(for是個**塊並不是個函式),所以整個過程中只有乙個i,所以在三次迴圈中,繫結的是統一個i,這樣最後i變成3了之後,arr1裡面三個函式都返回了3.

const arr1 =

;for

(var i=

0; i <

3; i++

)arr1.

map(x =>x(

));// [3,3,3]

console.

log(i)

;// 3

下面**中,let的作用域是for迴圈這個**塊,所以arr2中的三個函式繫結的j是不同的。 而從for迴圈之外是沒有辦法直接訪問j的。

const arr2 =

;for

(let j=

0; j <

3; j++

)arr2.

map(x =>x(

));// [0,1,2]

console.

log(j)

;// referenceerror: j is not defined

// typeerror: assignment to constant variable

for(

const i=

0; i<

3; i++

)//但是可以這樣用:

for(

const i of[0

,1,2

])

var和let const的區別

let和const是 es6 新增的命令,用於宣告變數,這兩個命令跟 es5 的var有許多不同,並且let和const也有一些細微的不同,再認真閱讀了阮一峰老師的文件後,發現還是有一些不知道的細節 var和let const的區別 塊級作用域 不存在變數提公升 暫時性死區 不可重複宣告 let c...

var和let const的區別

let和const是 es6 新增的命令,用於宣告變數,這兩個命令跟 es5 的var有許多不同,並且let和const也有一些細微的不同,再認真閱讀了阮一峰老師的文件後,發現還是有一些不知道的細節.部落格 前端積累文件 github var和let const的區別塊級作用域 不存在變數提公升 暫...

let const和var的區別

1.1 var沒有塊作用域,很容易汙染全域性 函式中的變數汙染了全域性環境 function run run console.log web houlaizhe 沒有塊作用作用域時var也會汙染全域性 for var i 0 i 10 i console.log i 1.2 塊作用域 沒有塊作用時使...