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...