let與var的區別

2021-09-11 10:14:15 字數 1289 閱讀 7039

let為es6新增的用來宣告變數的命令,用法類似與var,那麼let和var具體是怎麼個用法以及他們之間有什麼區別呢?

一. let宣告的變數只在let**塊有效

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

console.log(b); // 2複製**

用let宣告了變數a,用var宣告了變數b,輸出的時候a報錯,b輸出了正確的值,這說明let只在它所在的**塊內有效。

例項:

var a = ;

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

}a[6](); // 10複製**

var宣告變數是全域性範圍內有效的,雖然每次迴圈i都在改變,但是迴圈內都賦值給了a的i,相當於每次迴圈出來的i都是指向同乙個i,也就是最後乙個i,所以為10;

var a = ;

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

}a[6](); // 6複製**

let宣告的變數i只在本輪迴圈有效,每次迴圈的i都是乙個全新的變數,所以值為6;

二. 不存在變數提公升

console.log(foo); // 輸出undefined

var foo = 2;複製**

console.log(bar); // 報錯referenceerror

let bar = 2;複製**

var會有變數提公升,所以在輸出foo之前,foo由於變數提公升,就已經存在了,但是沒有值,所以為undefined;let不存在變數提公升,輸出bar之前還未定義bar,所以報錯。

三. 暫時性死區

var tmp = 123;

if (true) 複製**

var tmp = 123;

if (true) 複製**

全域性宣告了變數tmp,但是在**塊中又用let宣告了tmp,使得後者繫結了塊級作用域,此時的tmp是在宣告之前就賦值了,所以報錯。在**塊內,使用let命令宣告變數之前,該變數都是不可用的。這在語法上,稱為「暫時性死區」。

四. 不允許重複宣告

複製**

複製**
let不允許在函式內部重複宣告同乙個函式,否則會報錯。

var 與 let 的區別

var與let的區別是作用域不同,var作用域在最近的函式區塊內,let作用域在最近的封閉區塊內,比函式區塊要小。如果沒有在區塊內的話,二者都是全域性的。全域性的 在函式區塊之外使用的話,二者是等價的,都是全域性的。let me go globally scoped vari able global...

let 與 var 的區別

let 與 var 的區別 a.let 不能重複宣告,但var可以 b.let會產生塊級作用域,且只在自己的作用域內生效,但var不受限制 c.變數提公升 console.log i undefined var i 10 console.log i 10 console.log i 報錯 let i...

let與var的區別

文章中 後面的均為列印結果 1 console.log str1 小花 console.log str2 error str2 is not defined let作用域僅限於當前 塊,而var的作用域是全域性的 2 let作用域不會被提公升,而var作用域會被提公升 2相當於 3 var str1...