淺談JavaScript之var,let以及const

var

語(yǔ)法及說(shuō)明

var關(guān)鍵字用于聲明一個(gè)或多個(gè)變量,聲明多個(gè)變量時(shí)使用逗號(hào)(,)分隔喉镰,聲明變量的同時(shí)可以對(duì)其初始化。

var name1 = value , name2 = value2 , ......

使用var聲明變量時(shí)惭笑,聲明的變量作用域是在當(dāng)前位置的上下文中侣姆。
例如:

var a = 1;
function x(){
  a = 2;
  console.log(a);
}
x();

則輸出為2,因?yàn)槿钟行С霖钥梢孕薷钠渲怠?br> 但是如果只是將其聲明并未賦值捺宗,則不會(huì)報(bào)錯(cuò),其值為undefined川蒙。

var a;
function x(){
  console.log(a);//輸出為undefined
}
x();
特點(diǎn)
  • 變量聲明提升
    無(wú)論在代碼的任何位置聲明變量蚜厉,執(zhí)行引擎都會(huì)在任何代碼執(zhí)行之前處理。由于這個(gè)原因畜眨,所以在代碼中的任意位置聲明變量與在代碼開(kāi)頭聲明變量是等效的昼牛。
    例如:
function x(){
    a = 1;
    var a;
    console.log(a);//輸出為1
}
x();

注意:雖然可以先使用再定義變量,但是建議還是先定義再使用康聂,這樣可以使變量的作用域更加清晰匾嘱。

  • 聲明與未聲名變量的區(qū)別
    未聲明的變量會(huì)被添加一個(gè)全局作用域,而聲明變量作用域是當(dāng)前上下文:
function x() {
  y = 1;   // 在嚴(yán)格模式下會(huì)拋出ReferenceError
  var z = 2;
}
x();
console.log(y); // '1'
console.log(z); // ReferenceError: z is not defined

聲明變量在任何代碼執(zhí)行前創(chuàng)建早抠,而未聲明的變量只有在執(zhí)行賦值操作的時(shí)候才會(huì)被創(chuàng)建:

console.log(a);  // 拋出ReferenceError霎烙。
console.log('hello world'); // 不會(huì)執(zhí)行

聲明變量是不可配置屬性,而未聲明變量是可配置的:

var a = 1;
b = 2;
delete this.a; // 在嚴(yán)格模式下拋出TypeError,非嚴(yán)格模式下執(zhí)行失敗且無(wú)任何提示
delete this.b;
console.log(a, b); // 拋出ReferenceError悬垃,'b'屬性已經(jīng)被刪除

在嚴(yán)格模式下游昼,使用未賦值的變量會(huì)拋出異常,推薦還是先定義(聲明)再使用變量尝蠕。

let

語(yǔ)法及說(shuō)明

let用于定義塊級(jí)變量烘豌,其語(yǔ)法結(jié)構(gòu)類似于var:

let name1 = value , name2 = value2 , ......

特點(diǎn)
  • var聲明的變量是函數(shù)級(jí)的或者是全局的,而let用于聲明塊級(jí)作用域看彼。
 var a = 1;
  if(a > 0){
     let b = 2;
     console.log(b);//輸出2
     a --;
  }
  console.log(a);//輸出0
  console.log(b);//“ReferenceError”

所以此時(shí)的b的作用域是if語(yǔ)句里面廊佩。

  • let不允許在相同作用域內(nèi),重復(fù)聲明同一個(gè)變量靖榕。
function () {
  let a = 1;
  let a = 2;
}//error
  • let不存在變量聲明提升
a = 1;
let a;
console.log(a);//error

const

語(yǔ)法及說(shuō)明

const用于聲明一個(gè)或多個(gè)常量标锄,聲明時(shí)必須進(jìn)行初始化,且初始化后值不可再修改:

const name1 = value1 , name2 = value2 , ......

特點(diǎn)
  • const聲明常量茁计,一旦聲明料皇,常量的值就不能改變。
const PI = 3.14;
PI = 1;
console.log(PI);//error
  • const一旦聲明就必須初始化
const a; //error
  • const也是塊級(jí)作用域內(nèi)有效
 var a = 1;
  if(a > 0){
     const b = 2;
     console.log(b);//輸出2
     a --;
  }
  console.log(a);//輸出0
  console.log(b);//“ReferenceError”
  • const也沒(méi)有變量聲明提升
console.log(a);//error
const a = 1;

何時(shí)使用var星压,let以及const

在ES6中基本已經(jīng)不建議用var了践剂,因?yàn)関ar定義的變量沒(méi)有塊級(jí)作用域,并且它存在變量聲明提升娜膘,在嚴(yán)格模式下可能會(huì)出現(xiàn)意想不到的錯(cuò)誤逊脯,我們現(xiàn)在推薦使用const,當(dāng)不能使用const的時(shí)候再用let竣贪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末军洼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贾富,更是在濱河造成了極大的恐慌歉眷,老刑警劉巖牺六,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颤枪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡淑际,警方通過(guò)查閱死者的電腦和手機(jī)畏纲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)春缕,“玉大人盗胀,你說(shuō)我怎么就攤上這事〕簦” “怎么了票灰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我屑迂,道長(zhǎng)浸策,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任惹盼,我火速辦了婚禮庸汗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘手报。我一直安慰自己蚯舱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布掩蛤。 她就那樣靜靜地躺著枉昏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盏档。 梳的紋絲不亂的頭發(fā)上凶掰,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音蜈亩,去河邊找鬼懦窘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛稚配,可吹牛的內(nèi)容都是我干的畅涂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼道川,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼午衰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起冒萄,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤臊岸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后尊流,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帅戒,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年崖技,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逻住。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迎献,死狀恐怖瞎访,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吁恍,我是刑警寧澤扒秸,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布播演,位于F島的核電站,受9級(jí)特大地震影響伴奥,放射性物質(zhì)發(fā)生泄漏宾巍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一渔伯、第九天 我趴在偏房一處隱蔽的房頂上張望顶霞。 院中可真熱鬧,春花似錦锣吼、人聲如沸选浑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)古徒。三九已至,卻和暖如春读恃,著一層夾襖步出監(jiān)牢的瞬間隧膘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工寺惫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疹吃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓西雀,卻偏偏與公主長(zhǎng)得像萨驶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子艇肴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • let 命令 塊級(jí)作用域 const 命令 頂層對(duì)象的屬性 global 對(duì)象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice閱讀 1,624評(píng)論 0 2
  • let 命令 塊級(jí)作用域 const 命令 頂層對(duì)象的屬性 global 對(duì)象 let 命令 基本用法 ES6 新...
    卞卞村長(zhǎng)L閱讀 589評(píng)論 0 0
  • 本文屬個(gè)人筆記,不做詳解冲九,僅供參考谤草! let命令 基本用法 ES6 新增了let命令,用來(lái)聲明變量娘侍。它的用法類似于...
    R_yan閱讀 28,998評(píng)論 6 18
  • let 和 const 命令 let 命令 塊級(jí)作用域 const 命令 頂層對(duì)象的屬性 gl...
    安小明閱讀 980評(píng)論 0 0
  • JavaScript之父:Brendan Eich 咖刃。 -基本語(yǔ)法:借鑒了C語(yǔ)言和Java語(yǔ)言泳炉。-數(shù)據(jù)結(jié)構(gòu):借鑒了...
    饑人谷_kule閱讀 585評(píng)論 0 0