var let const

菜鳥學(xué)前端

本文:https://blog.csdn.net/CrazyApes/article/details/128957891

@[toc]

說實話召烂,在看到這個之前奏夫,我只知道 var,以前也只用過這玩意廊谓。
后面那倆都不知道是干啥用的麻削。
感謝同桌的提示。
記叠荠!

var

varES5 提出的扫责。用于聲明變量。

什么是 ES5 者娱?
ES5 全稱 ECMAScript5黄鳍,即 ES5平匈,是ECMAScripts的第五次修訂(第四版因為過于復(fù)雜廢棄了)藏古,又稱ECMAScript2009校翔,于 2009 年完成標(biāo)準(zhǔn)化灾前。

var num = 1;
var str = 'a';
var fun = function(){};
var obj = {};
var bean = new ABC(); /* 需要提前聲明過ACB這個類型 */

var 就是一切哎甲,想是啥就可以是啥,而且是 弱類型貌虾。就算是賦值完了還可以賦值為其它類型的值。
當(dāng)然因為是重復(fù)賦值衔憨,肯定只有最后一次有效袄膏。

var any = 1;
any = 'a';
any = function(){};
any = {};
any = new ABC(); /* 需要提前聲明過ACB這個類型 */
any = false;
console.log(any);

// print 
false

var 還可以重復(fù)聲明沉馆,就是說即使你聲明過變量any ,還可以再次聲明 any揖盘。
同樣的锌奴,因為是同一個變量名,后者肯定會覆蓋前者椭符。
上面那段代碼還可以這么寫耻姥。

var any = 1;
var any = 'a';
var any = function(){};
var any = {};
var any = new ABC(); /* 需要提前聲明過ACB這個類型 */
var any = false;
console.log(any);

// print 
false

var 還可以 變量提升 !U艚 !啥是變量提升似忧? 額盯捌,大概是把自己變牛逼了。
你看箫攀,它可先使用幼衰,后聲明。

console.log(any);
var any = false;

// print 
undefined

后來才了解到有個什么預(yù)解析過程梢睛,會提前加載這個變量识椰。
類似于如下:

var any;
console.log(any);
any = false;

// print 
undefined

這樣一來,結(jié)合以上特征挤牛,代碼開始漸漸奇怪起來种蘸。

for(var index = 0;index < 10; index++ ){
     /* do something */
}

...
/* n 多代碼之后 */
...

/* 腦抽了航瞭,突然想聲明個index用來做某個標(biāo)記位 */
var index; 
if (index) {
    console.log('already init !!!');
    console.log('index value:' + index);
} else {
    /* init something */
    console.log('init index');
    index = 1;
}

// print 
already init !!!
index value: 10

唉,啥情況章办,哪來的10滨彻??休偶?
大家可能說辜羊,上面那個for循環(huán)的鍋词顾。
但是在多人協(xié)作的情況下肉盹,代碼沒報錯疹尾,執(zhí)行結(jié)果卻不是你想要的。
而且這種情況下睡雇,排查是個非常困難的事,因為真不知道誰在哪個地方突然聲明了一個一樣的變量秕豫。

而且再極端一些,那個for循環(huán)假設(shè)只在某些條件下才執(zhí)行祠墅。
那么剛才那個代碼就成了歌径,你這個bug偶爾出現(xiàn),偶爾消失狗准。

let和const

letconst 都是 ES6 提出的腔长。一個用于聲明變量验残,一個用于聲明常量。

什么是ES6鸟召?
ES6氨鹏, 全稱 ECMAScript 6.0 ,即 ES6槽片,是ECMAScripts的第六次修訂,又稱 ES2015还栓,于2015年06 月發(fā)版,是 JavaScript 的下一個版本標(biāo)準(zhǔn)谷婆。

ES6 中有了塊級作用域的概念辽聊,letconst 都是塊級作用域。以 {} 代碼塊作為作用域范圍异袄,只能在代碼塊里面使用玛臂,不存在變量提升,只能先聲明再使用讽营,否則會報錯橱鹏。

if (true) {
   let a = 'let';
   var b = 'var';
}
 
console.log(b); // var
console.log(a); // Uncaught ReferenceError: a is not defined
console.log(c); // Uncaught ReferenceError: c is not defined
let c = 'c'

在代碼塊內(nèi)堪藐,在聲明變量之前,該變量都是不可用的贮勃。
這在語法上苏章,稱為“暫時性死區(qū)”(temporal dead zone,簡稱 TDZ)泉孩,在同一個代碼塊內(nèi)并淋,不允許重復(fù)聲明。只要塊級作用域內(nèi)存在let命令句喷,它所聲明的變量就“綁定”(binding)這個區(qū)域,不再受外部的影響唾琼。不同代碼塊是可以重復(fù)聲明的。

let a = 'let a'
if (true) {
    let a = 'let if a';
    console.log(a); // print 'let if a'

    let a = 'next same let'
    console.log(a); // Uncaught SyntaxError: Identifier 'a' has already been declared
}
console.log(a); // print 'let a'

const 聲明的是一個只讀常量赶舆,在聲明時就需要賦值芜茵。(如果 const 的是一個對象倡蝙,
對象所包含的值是可以被修改的。抽象一點兒說蒸辆,就是對象所指向的地址不能改變析既,而變量成員是可以修改的眼坏。)

const any = 'abc';
const obj = {};

除了不可重復(fù)賦值的問題酸些,其它和 let 作用域類似,功能類似沿侈。

寫不動了

寫不動了市栗。。蛛淋。后面有想法了再慢慢了解和補充篡腌。。

參考

談?wù)凟S5和ES6的區(qū)別
ES6的let和const
var叛甫、let、const的區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萌腿,一起剝皮案震驚了整個濱河市棠赛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鼎俘,老刑警劉巖辩涝,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怔揩,死亡現(xiàn)場離奇詭異,居然都是意外死亡伏伐,警方通過查閱死者的電腦和手機晕拆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門实幕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人末贾,你說我怎么就攤上這事整吆。” “怎么了裕膀?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵昼扛,是天一觀的道長。 經(jīng)常有香客問我渺鹦,道長蛹含,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任吸耿,我火速辦了婚禮酷窥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妆棒。我一直安慰自己沸伏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布红选。 她就那樣靜靜地躺著喇肋,像睡著了一般蜕青。 火紅的嫁衣襯著肌膚如雪右核。 梳的紋絲不亂的頭發(fā)上渺绒,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音躏鱼,去河邊找鬼殷绍。 笑死,一個胖子當(dāng)著我的面吹牛茶行,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畔师,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼看锉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伯铣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤趾诗,失蹤者是張志新(化名)和其女友劉穎蹬蚁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贝乎,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡叽粹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年虫几,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片但校。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡啡氢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倘是,到底是詐尸還是另有隱情,我是刑警寧澤叨粘,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布宣鄙,位于F島的核電站,受9級特大地震影響冻晤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鼻弧,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一攘轩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧歼捏,春花似錦笨篷、人聲如沸瞳秽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辜贵。三九已至悯蝉,卻和暖如春鼻由,著一層夾襖步出監(jiān)牢的瞬間榴芳,已是汗流浹背跺撼。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工歉井, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓蜜自,卻偏偏與公主長得像卢佣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子戈鲁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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