0.1 2018.02.23 11:06* 字數 584
let是es6中新增命令,也是用來宣告變數的,可能很多小夥伴都像我一樣,定義變數的時候都會用var而很少用到let,那麼,let和var到底有什麼區別呢?
let和var的區別體現在作用域上。var的作用域被規定為乙個函式作用域,而let則被規定為塊作用域,塊作用域要比函式作用域小一些,但是如果兩者既沒在函式中,也沒在塊作用域中定義,那麼兩者都屬於全域性作用域。
全域性作用域
var 和 let 宣告的變數在全域性作用域中被定義時,兩者非常相似
let bar = 'hehe';
var baz = 'lala';
但是,被let宣告的變數不會作為全域性物件window的屬性,而被var宣告的變數卻可以
console.log(window.bar); //undefined
console.log(window.baz); // 'able'
函式作用域
var 和 let 在函式作用域中宣告乙個變數,兩個變數的意義是相同的。
function afun()
塊作用域
在塊作用域中兩者的區別較為明顯, let只在for()迴圈中可用,而 var是對於包圍for迴圈的整個函式可用
function afun1()
// i 對於for迴圈外的範圍是不可見的(i is not defined)
}function afun2()
// i 對於for迴圈外的範圍是可見的
}
let 和var 重新宣告
var允許在同一作用域中宣告同名的變數,而let不可以
let me = 'foo';
let me = 'bar'; //syntaxerror: identifier 'me' has already been declared
var me = 'foo';
var me = 'bar'; //這裡me被替代了,是可以重複宣告的
es6中還有乙個宣告變數的命令const,const和let都是在宣告的塊作用域中有效,但是let宣告的變數可變,值和型別都可以改變,沒有限制。const宣告額變數不能改變,所以,const一旦宣告乙個變數,就必須馬上初始化,不能留到以後賦值
const hehe; //報錯,missing initializer in const declaration
const a = 3;
a = 5; //報錯,uncaught typeerror: assignment to constant variable.
以上就是let和var在不同作用域下的區別
那麼在什麼情況下要用到let呢?
let 在塊作用域中有效,有的時候,我們為了降低變數汙染的風險,在塊作用域中使用let來代替var,這樣不會汙染塊作用域的外部作用域,降低 bug率,使**更安全。
JS中const var和let區別
今天遇到const定義的變數,查閱了相關資料整理了這篇文章。主要內容是 js中三種定義變數的方式const,var,let的區別。1.const定義的變數不可以修改,而且必須初始化。const b 2 正確 const b 錯誤,必須初始化 console.log 函式外const定義b b 有輸出...
js中let和var const的區別
es6中增加了let關鍵字以定義塊級作用域的變數 1.var可以重複宣告,後面的會覆蓋前面的,let不允許重複宣告,會直接報錯 var a 10 var a 20 20 console.log a let b 10 let b 20 identifier b has already been dec...
vue中let和var的區別
vue中 let 和 var 的區別 1 作用域不一樣 var是函式作用域,let是塊作用域 在函式中宣告了var,在整個函式中都是有效的,比如在函式中用for定義了乙個var變數,實際上在for迴圈外也能訪問,比如 1 for var i 0 i 2 i 23 45 i 6 278 9 12 10...