var,const予借,let

變量聲明:var越平,const,let

在JavaScript中灵迫,有三個關(guān)鍵字可用于聲明一個變量秦叛,并且每個關(guān)鍵字都有其不同之處。那些是var瀑粥,let而且const

簡短的解釋

使用const關(guān)鍵字聲明的變量不能被重新賦值挣跋,let而且var可以。

范圍 重新賦值 易變的 暫時性死區(qū)
const
let
var 功能
示例代碼
const person = "Nick";
person = "John"; // Will raise an error, person can't be reassigned
let person = "Nick";
person = "John";
console.log(person); // "John", reassignment is allowed with let
詳細的解釋

變量的范圍大致意味著“代碼中可用的變量的作用域”利凑。

var

var聲明的變量是函數(shù)作用域的浆劲,這意味著當(dāng)在函數(shù)中創(chuàng)建變量時,該函數(shù)中的所有內(nèi)容都可以訪問該變量哀澈。此外牌借,函數(shù)中創(chuàng)建的函數(shù)作用域變量不能在此函數(shù)之外訪問。

示例代碼
function myFunction() {
  var myVar = "Nick";
  console.log(myVar); // "Nick" - myVar is accessible inside the function
}
console.log(myVar); // Throws a ReferenceError, myVar is not accessible outside the function.
function myFunction() {
  var myVar = "Nick";
  if (true) {
    var myVar = "John";
    console.log(myVar); // "John"
    // actually, myVar being function scoped, we just erased the previous myVar value "Nick" for "John"
  }
  console.log(myVar); // "John" - see how the instructions in the if block affected this value
}
console.log(myVar); // Throws a ReferenceError, myVar is not accessible outside the function.

這部分代碼:

console.log(myVar) // undefined -- no error raised
var myVar = 2;

在執(zhí)行中被理解為:

var myVar;
console.log(myVar) // undefined -- no error raised
myVar = 2;
let

var和let大致相同割按,但let聲明的變量

  • 是塊范圍
  • 不存在變量提升
  • 不能在同一范圍內(nèi)重新聲明
示例代碼
function myFunction() {
  let myVar = "Nick";
  if (true) {
    let myVar = "John";
    console.log(myVar); // "John"
    // actually, myVar being block scoped, we just created a new variable myVar.
    // this variable is not accessible outside this block and totally independent
    // from the first myVar created !
  }
  console.log(myVar); // "Nick", see how the instructions in the if block DID NOT affect this value
}
console.log(myVar); // Throws a ReferenceError, myVar is not accessible outside the function.

現(xiàn)在膨报,let(和const)變量在分配前不可訪問的含義是什么:

// var 的情況
console.log(foo); // 輸出undefined
var foo = 2;

// let 的情況
console.log(bar); // 報錯ReferenceError
let bar = 2;

與var變量相比,如果在分配之前嘗試讀取或?qū)懭雔et或const變量适荣,則會引發(fā)錯誤现柠。這種現(xiàn)象通常稱為暫時性死區(qū)或TDZ。

另外弛矛,你不能重新聲明一個let變量:

let myVar = 2;
let myVar = 3; // Raises a SyntaxError
const (常量)

const聲明的變量行為就像let變量一樣够吩,但不能被重新賦值。
總結(jié)一下丈氓,const變量:

  • 是塊范圍
  • 在賦值之前不可訪問
  • 不能在同一范圍內(nèi)重新定義
  • 不能重新賦值
實例代碼
const myVar = "Nick";
myVar = "John" // raises an error, reassignment is not allowed
const myVar = "Nick";
const myVar = "John" // raises an error, re-declaration is not allowed

但有一個微妙之處:const變量不是不變的周循!具體而言,這意味著對象和數(shù)組 const聲明的變量可能會發(fā)生變化万俗。

對于對象:

const person = {
  name: 'Nick'
};
person.name = 'John' // this will work ! person variable is not completely reassigned, but mutated
console.log(person.name) // "John"
person = "Sandra" // raises an error, because reassignment is not allowed with const declared variables

對于數(shù)組:

const person = [];
person.push('John'); // this will work ! person variable is not completely reassigned, but mutated
console.log(person[0]) // "John"
person = ["Nick"] // raises an error, because reassignment is not allowed with const declared variables
參考資料
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末湾笛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子闰歪,更是在濱河造成了極大的恐慌嚎研,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件库倘,死亡現(xiàn)場離奇詭異临扮,居然都是意外死亡论矾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門杆勇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拇囊,“玉大人,你說我怎么就攤上這事靶橱。” “怎么了路捧?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵关霸,是天一觀的道長。 經(jīng)常有香客問我杰扫,道長队寇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任章姓,我火速辦了婚禮佳遣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凡伊。我一直安慰自己零渐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布系忙。 她就那樣靜靜地躺著诵盼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪银还。 梳的紋絲不亂的頭發(fā)上风宁,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音蛹疯,去河邊找鬼戒财。 笑死,一個胖子當(dāng)著我的面吹牛捺弦,可吹牛的內(nèi)容都是我干的饮寞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼羹呵,長吁一口氣:“原來是場噩夢啊……” “哼骂际!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冈欢,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤歉铝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凑耻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體太示,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡柠贤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了类缤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臼勉。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖餐弱,靈堂內(nèi)的尸體忽然破棺而出宴霸,到底是詐尸還是另有隱情,我是刑警寧澤膏蚓,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布瓢谢,位于F島的核電站,受9級特大地震影響驮瞧,放射性物質(zhì)發(fā)生泄漏氓扛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一论笔、第九天 我趴在偏房一處隱蔽的房頂上張望采郎。 院中可真熱鬧,春花似錦狂魔、人聲如沸蒜埋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽理茎。三九已至,卻和暖如春管嬉,著一層夾襖步出監(jiān)牢的瞬間皂林,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工蚯撩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留础倍,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓胎挎,卻偏偏與公主長得像沟启,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子犹菇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359

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