Es6 let和const

ES6 新增了let命令,用來聲明變量哥谷。它的用法類似于var岸夯,但是所聲明的變量,只在let命令所在的代碼塊內(nèi)有效们妥。

1.let命令

  1. 不存在變量提升
console.log(a); // undefined
var a = 0;
console.log(b) //Error 
let b = 10;

2.暫時性死區(qū)

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp; 
}

其實在用let關(guān)鍵字聲明變量之前使用就是暫時性死區(qū)

咱們都知道js中的typeof方法是不會報錯的,但是到啦Es6就有可能會報錯啦,看下邊的例子

typeof(a) // Errow 報錯其實大家因該都知道啦,這里的a在聲明之前就使用 啦 就是咱們上邊說的暫時性死區(qū)的;
let a = 10;

  1. 不允許重復(fù)聲明

不允許在同一作用域內(nèi)聲明同樣的變量

function func() {
  let a = 10;
  var a = 1;
}

// 報錯
function func() {
  let a = 10;
  let a = 1;
}

2. 塊級作用域

function f1() {
  let n = 5;
  if (true) {
    let n = 10;
  }
  console.log(n); // 5
}

雖然這個判斷執(zhí)行啦,但是因為塊級作用域不允許外邊的塊級作用域使用里邊的塊級作用域的東西,跟閉包的原理差不多

  1. 塊級作用域與函數(shù)聲明
    ES5 規(guī)定猜扮,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明,不能在塊級作用域聲明监婶。
// 情況一
if (true) {
  function f() {}
}

瀏覽器為了兼容以前的舊代碼,沒有遵守這個規(guī)定,所以上邊的代碼是生效的,但是不建議大家使用.

function f() { console.log('我在外面!'); }

(function () {
  if (false) {
    function f() { console.log('我在里面'); }
  }
  f();
}());

上邊的代碼在Es5中運行會得到"我在里面"的結(jié)果,應(yīng)為在判斷里邊的函數(shù)被提升到函數(shù)的頭部,實際運行代碼如下

function f() { console.log('I am outside!'); }

(function () {
  function f() { console.log('I am inside!'); }
  if (false) {
  }
  f();
}());

但是到啦Es6就不一樣啦,理論上在Es6的環(huán)境下運行結(jié)果會是"我在外面",但是真的運行的時候會報錯,為什么呢?

原來是應(yīng)為Es6修改啦在塊級作用域下聲明函數(shù)的規(guī)則

允許在塊級作用域內(nèi)聲明函數(shù)旅赢。
函數(shù)聲明類似于var,即會提升到全局作用域或函數(shù)作用域的頭部惑惶。
同時煮盼,函數(shù)聲明還會提升到所在的塊級作用域的頭部。

實際上在遵守Es6規(guī)定下的瀏覽器上實際的運行過程為:

function f() { console.log('我在外面!'); }
(function () {
  var f = undefined;
  if (false) {
    function f() { console.log('我在里面!'); }
  }

  f();
}());
// Uncaught TypeError: f is not a function

3.const

1.const一旦聲明并初始化,這個常亮的值就不得被改變

const a = 10;
a = 20;
// Error
  1. const一旦聲明必須初始化否則報錯
  const a;
  //Errow

3.const的作用域與let命令相同:只在聲明所在的塊級作用域內(nèi)有效带污。

if (true) {
  const MAX = 5;
}

console.log(MAX) // Uncaught ReferenceError: MAX is not defined

4.const命令聲明的常量也是不提升僵控,同樣存在暫時性死區(qū),只能在聲明的位置后面使用鱼冀。

if (true) {
  console.log(MAX); // ReferenceError
  const MAX = 5;
}

5.const聲明的常量报破,也和let一樣不可重復(fù)聲明

var message = "Hello!";
let age = 25;

// 以下兩行都會報錯
const message = "Goodbye!";
const age = 30;

實際上const并不是值不可以改變,而是這個常量的內(nèi)存指向的那個地址

const foo = {};

// 為 foo 添加一個屬性,可以成功
foo.prop = 123;
foo.prop // 123

// 將 foo 指向另一個對象,就會報錯
foo = {}; // TypeError: "foo" is read-only

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市回官,隨后出現(xiàn)的幾起案子喷兼,更是在濱河造成了極大的恐慌,老刑警劉巖踢京,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹉究,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門踪宠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來自赔,“玉大人,你說我怎么就攤上這事柳琢∩芊粒” “怎么了润脸?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長他去。 經(jīng)常有香客問我毙驯,道長,這世上最難降的妖魔是什么灾测? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任爆价,我火速辦了婚禮,結(jié)果婚禮上媳搪,老公的妹妹穿的比我還像新娘铭段。我一直安慰自己,他們只是感情好秦爆,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布序愚。 她就那樣靜靜地躺著,像睡著了一般鲜结。 火紅的嫁衣襯著肌膚如雪展运。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天精刷,我揣著相機(jī)與錄音拗胜,去河邊找鬼。 笑死怒允,一個胖子當(dāng)著我的面吹牛埂软,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纫事,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勘畔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丽惶?” 一聲冷哼從身側(cè)響起炫七,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钾唬,沒想到半個月后万哪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡抡秆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年奕巍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儒士。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡的止,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出着撩,到底是詐尸還是另有隱情诅福,我是刑警寧澤匾委,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站权谁,受9級特大地震影響剩檀,放射性物質(zhì)發(fā)生泄漏憋沿。R本人自食惡果不足惜旺芽,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辐啄。 院中可真熱鬧采章,春花似錦、人聲如沸壶辜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砸民。三九已至抵怎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岭参,已是汗流浹背反惕。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留演侯,地道東北人姿染。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像秒际,于是被迫代替她去往敵國和親悬赏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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

  • ES5 只有兩種聲明變量的方法:var命令和function命令娄徊。ES6 添加let闽颇、const、import和c...
    我就是z閱讀 654評論 0 1
  • let 和 const 命令 let 命令 塊級作用域 const 命令 頂層對象的屬性 gl...
    安小明閱讀 981評論 0 0
  • 基本都是從阮一峰大神的文檔中摘錄的重點寄锐,鏈接:http://es6.ruanyifeng.com/?search=...
    立的flag一直在倒閱讀 307評論 0 0
  • ES6 在原有兩種聲明變量命令(var和function)的基礎(chǔ)上兵多,又加入了一共四種聲明變量的命令let cons...
    流光號船長閱讀 274評論 0 1
  • 故事歌曲:《退》 退到無路可退,別狼狽锐峭,回頭中鼠,我一直都在你身后,等你沿癞。 01 我在時間的盡頭等你援雇。 “蔣昕明,你是...
    她是球球呀閱讀 336評論 0 3