ES6(一)--let和const

使用let危尿,不會造成變量提升

ES5

console.log(test); //結(jié)果是undefined
var test = 'test';

可以理解為:

var test;
console.log(test); //結(jié)果是undefined
test = 'test';

ES6

console.log(test); //結(jié)果是ReferenceError:test is not defined
let test = 'test';

因為不存在變量提升呐萌,可以理解為:

console.log(test);
let test; //上不去哩,所以報錯了谊娇。
test = 'test';

作用在塊級作用域

首先要科普一下塊級作用域:

在ES6之前javascript是用函數(shù)function來劃分作用域肺孤,于是定義的變量作用在各個函數(shù)里,單獨或者嵌套济欢,也造成了函數(shù)作用域鏈赠堵。

現(xiàn)在ES6定義了塊級作用域,用{}(if法褥、for等使用了{}才具備塊級作用域的條件)劃分塊級作用域茫叭,let在塊級作用域定義的變量在離開塊級作用域的時候會被銷毀,所以在塊級作用域內(nèi)定義的變量在塊級作用域外訪問的話會報引用錯誤(ReferenceError)

ES5

{
    var a = 1;
}
console.log(a); //結(jié)果為1

ES6

{
    let a = 1;
}
console.log(a) //結(jié)果是ReferenceError: a is not defined

不允許重復(fù)聲明變量

ES5

{
    var a = 1;
    var a = 2; //我照樣過得好好的~
}

ES6

{
    let a = 1;
    let a = 2; //出錯啦~,SyntaxError: Identifier 'a' has already been declared
}

暫時性死區(qū)(temporal dead zone半等,簡稱 TDZ)

ES6明確規(guī)定揍愁,如果區(qū)塊中存在let和const命令,這個區(qū)塊對這些命令聲明的變量杀饵,從一開始就形成了封閉作用域莽囤。凡是在聲明之前就使用這些變量,就會報錯切距。

沒有l(wèi)et的區(qū)塊(無論是es5還是es6)

{
  tmp = 'abc';
  console.log(tmp); //結(jié)果為abc
}
{
  tmp = 'abc';
  console.log(tmp); //結(jié)果為abc
  var tmp; //這里定義的tmp將會變量提升烁登,相當于移動這個語句在tmp = 'abc'上面。
}

有l(wèi)et的區(qū)塊

{
  // TDZ開始蔚舀,因為下面出現(xiàn)了let tmp饵沧,所以let以上的語句出現(xiàn)暫時性死區(qū)
  tmp = 'abc'; // ReferenceError
  console.log(tmp); // ReferenceError

  let tmp; // TDZ結(jié)束,let tmp以下的語句沒有暫時性死區(qū)赌躺,因為這里let tmp沒有賦值狼牺,所以下面報undefined的錯
  console.log(tmp); // undefined

  tmp = 123;
  console.log(tmp); // 123
}

typeof

typeof也會報錯

{
  typeof test; //ReferenceError: test is not defined
  let test = 2;
}

隱蔽的暫時性死區(qū)

function bar(x = y,y = 2){
    return [x,y]
}
bar(); //ReferenceError: y is not defined

在塊級作用域里聲明函數(shù)

ES5嚴格模式下(非嚴格模式下不會報錯)

'use strict';
if (true){
    function test(){console.log('test')}
}
test();  //ReferenceError:test is not defined

ES6允許在塊級作用域聲明函數(shù)

非嚴格模式

if (true) {
  function test() {console.log('test')}
}
test(); //結(jié)果為test

嚴格模式

不用var、let礼患、const定義:

'use strict';
if (true) {
  function test() {console.log('test')} //由于function沒有加var是钥、let、const定義缅叠,所以此函數(shù)的作用域是全局的
}
test() //結(jié)果為test

var:

'use strict';
if (true){
    var test = function(){console.log('test')} //由于function是用var定義的悄泥,所以此函數(shù)是當前function作用域,此處為global
}
test() //結(jié)果為test

let或者const:

'use strict';
if (true){
    let test = function(){console.log('test')} //由于function是用let定義的肤粱,所以此函數(shù)是當前塊級作用域弹囚,即是{}包括的區(qū)域,離開之后變量被銷毀
}
test() //結(jié)果為ReferenceError: test is not defined

const定義常量

不可以重新賦值

const test = 1;
test = 0; //TypeError: Assignment to constant variable.

一旦定義就必須初始化

const test; //SyntaxError: Missing initializer in const declaration

const定義的地址不能改變领曼,但是內(nèi)容可以改變

const test = [];
test.push('test');
console.log(test); //['test']

不存在變量提升

有暫時性死區(qū)

作用在塊級作用域

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸥鹉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子庶骄,更是在濱河造成了極大的恐慌毁渗,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件单刁,死亡現(xiàn)場離奇詭異灸异,居然都是意外死亡,警方通過查閱死者的電腦和手機羔飞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門肺樟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人褥傍,你說我怎么就攤上這事儡嘶。” “怎么了恍风?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵蹦狂,是天一觀的道長。 經(jīng)常有香客問我朋贬,道長凯楔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任锦募,我火速辦了婚禮摆屯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己虐骑,他們只是感情好准验,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著廷没,像睡著了一般糊饱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颠黎,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天另锋,我揣著相機與錄音,去河邊找鬼狭归。 笑死夭坪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的过椎。 我是一名探鬼主播室梅,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼潭流!你這毒婦竟也來了竞惋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灰嫉,失蹤者是張志新(化名)和其女友劉穎拆宛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讼撒,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡浑厚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了根盒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钳幅。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖炎滞,靈堂內(nèi)的尸體忽然破棺而出敢艰,到底是詐尸還是另有隱情,我是刑警寧澤册赛,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布钠导,位于F島的核電站,受9級特大地震影響森瘪,放射性物質(zhì)發(fā)生泄漏牡属。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一扼睬、第九天 我趴在偏房一處隱蔽的房頂上張望逮栅。 院中可真熱鬧,春花似錦、人聲如沸措伐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽废士。三九已至叫潦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間官硝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工短蜕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氢架,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓朋魔,卻偏偏與公主長得像岖研,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子警检,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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