let,const和var的區(qū)別

let,const和var的區(qū)別

聲明方式 變量提升 作用域 初始值 重復(fù)定義
const 塊級 需要 不允許
let 塊級 不需要 不允許
var 函數(shù)級 不需要 允許

變量提升:const 和 let 必須先聲明再使用,不支持變量提升

console.log(c1, l1, v1);
// 報錯
// Uncaught ReferenceError: c1 is not defined
  
const c1 = 'c1';
let l1 = 'l1';
var v1 = 'v1';

作用域:const,let 支持塊級作用域,有效避免變量覆蓋

const c21 = 'c21';
let l21 = 'l21';
var v21 = 'v21';
  
if (0.1 + 0.2 != 0.3) {
 const c21 = 'c22';
 let l21 = 'l22';
 var v21 = 'v22';
  
 console.log(c21, l21, v21);
 // 輸出 c22 l22 v22
}
  
console.log(c21, l21, v21);
// 輸出 c21 l21 v22

塊級作用域砰苍,在外層不能直接訪問內(nèi)層變量

if (0.1 + 0.2 != 0.3) {
 const c22 = 'c22';
 let l22 = 'l22';
 var v22 = 'v22';
  
 console.log(c22, l22, v22);
 // 輸出 c22 l22 v22
}
  
console.log(c22, l22, v22);
// 報錯
// Uncaught ReferenceError: c22 is not defined
// 同樣地, l22 is not defined

const 定義常量潦匈,該常量不能賦值,但該常量的屬性可以賦值

const c231 = {};
const c232 = [];
  
c231.name = 'seven';
c232.push(27);
  
console.log(c231, c232);
// 輸出 {name: "seven"} [27]
  
// 禁止給對象賦值赚导,應(yīng)該使用 Object.freeze
  
const c233 = Object.freeze({});
const c234 = Object.freeze([]);
  
c233.name = 'seven';
// 普通模式下不報錯
// 嚴(yán)格模式下報錯
// Uncaught TypeError: Cannot add property name, object is not extensible
   
c234.push(27);
// 普通模式下就會報錯
// Uncaught TypeError: Cannot add property 0, object is not extensible
  
console.log(c233, c234);
// 輸出 {} []

全局變量不再設(shè)置為頂層對象(window)的屬性茬缩,有效避免全局變量污染

const c24 = 'c24';
let l24 = 'l24';
  
console.log(c24, l24);
// 輸出 c24 l24
  
console.log(window.c24, window.l24);
// 輸出 undefined undefined

符合預(yù)期的 for 循環(huán)

for (var i = 0; i != 3; i++) {
 setTimeout(function() {
  console.log(i);
 },10);
}
// 依次打印
 
for (let i = 0; i != 3; i++) {
 setTimeout(function() {
  console.log(i);
 },10);
}
// 依次打印,為啥呢

可以看到在 for 循環(huán)中使用 let 方式聲明變量才是符合預(yù)期吼旧。

在 for 中每一次循環(huán)凰锡,let 都是重新聲明變量,并且因為 JavaScript 引擎會記住上一次循環(huán)的值圈暗,初始化 i 時在上一輪的基礎(chǔ)上計算掂为。

可以看到在 for 循環(huán)中至少有兩層作用域,看下面的例子更容易理解员串。

for (let i = 0; i != 3; i++) {
 let i = 'seven';
 console.log(i);
}
console.log('eight');
// 依次打印
seven
seven
seven
eight

初始值:const 聲明的變量必須設(shè)置初始值勇哗,且不能重復(fù)賦值。

const c3 = 'c3';
let l3 = 'l3';
var v3 = 'v3';
  
console.log(c3, l3, v3);
// 輸出 c3 l3 v3
  
c3 = 2; // Uncaught TypeError: Assignment to constant variable
l3 = 2;
v3 = 2;
  
console.log(c3, l3, v3);
// 輸出 c3 2 2
  
const c32;
// 報錯
// Uncaught SyntaxError: Missing initializer in const declaration

重復(fù)定義:const 和 let 不支持重復(fù)定義

const寸齐、let 縮小了變量作用域欲诺,完美避免變量污染;const 固定變量(即固定變量類型)渺鹦,對于弱類型 JavaScript 來說扰法,可以明顯提升性能。推薦在應(yīng)用中使用 const毅厚、let 聲明變量塞颁。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卧斟,隨后出現(xiàn)的幾起案子殴边,更是在濱河造成了極大的恐慌,老刑警劉巖珍语,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異竖幔,居然都是意外死亡板乙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門拳氢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來募逞,“玉大人,你說我怎么就攤上這事馋评》沤樱” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵留特,是天一觀的道長纠脾。 經(jīng)常有香客問我玛瘸,道長,這世上最難降的妖魔是什么苟蹈? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任糊渊,我火速辦了婚禮,結(jié)果婚禮上慧脱,老公的妹妹穿的比我還像新娘渺绒。我一直安慰自己,他們只是感情好菱鸥,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布宗兼。 她就那樣靜靜地躺著,像睡著了一般氮采。 火紅的嫁衣襯著肌膚如雪针炉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天扳抽,我揣著相機與錄音篡帕,去河邊找鬼。 笑死贸呢,一個胖子當(dāng)著我的面吹牛镰烧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播楞陷,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼怔鳖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了固蛾?” 一聲冷哼從身側(cè)響起结执,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艾凯,沒想到半個月后献幔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡趾诗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年蜡感,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恃泪。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡郑兴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贝乎,到底是詐尸還是另有隱情情连,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布览效,位于F島的核電站却舀,受9級特大地震影響虫几,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜禁筏,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一持钉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧篱昔,春花似錦每强、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至穗椅,卻和暖如春辨绊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匹表。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工门坷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袍镀。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓默蚌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苇羡。 傳聞我的和親對象是個殘疾皇子绸吸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容