ES6學(xué)習(xí)筆記一|let和const命令

let和const命令

1. let命令

只要塊級作用域內(nèi)存在let命令馋艺,它所聲明的變量就“綁定”這個區(qū)域夸研,不再受外部的影響骚揍。

ES6明確規(guī)定永部,如果區(qū)塊總存在let和const命令独泞,這個區(qū)塊對這些命令聲明的變量,從一開始就形成了封閉作用域苔埋。凡是在聲明之前就使用這些變量懦砂,就會報(bào)錯。

  • 不存在變量提升组橄。
  • 聲明前被使用屬于暫時性死區(qū)荞膘,報(bào)錯。
  • 不允許重復(fù)聲明玉工。
//報(bào)錯
function () {
   let a = 10;
   var a = 1;
}
//報(bào)錯
function() {
  let a = 10;
  let a = 1;
}

2. 塊級作用域

  • ES6允許塊級作用域的任意嵌套羽资。外層作用域無法讀取內(nèi)層作用域的變量。
  • 內(nèi)層作用域可以定義外層作用域的同名變量遵班。
  • ES6中屠升,塊級作用域聲明的函數(shù)類似于let,對作用域之外沒有影響狭郑。
  • ES6明確允許在塊級作用域中可以聲明函數(shù)腹暖。
  • 函數(shù)聲明類似var,即會提升到全局作用域或函數(shù)作用域的頭部翰萨。
  • 函數(shù)聲明還會提升到所在的塊級作用域的頭部脏答。

注意:以上最后三條只對ES6的瀏覽器實(shí)現(xiàn)有效。

3. const命令

  • const聲明一個只讀的常量缨历,一旦聲明以蕴,不能改變。
  • const一旦聲明變量辛孵,必須立即初始化丛肮。
  • const的作用域和let相同,只在聲明所在的塊級作用域有效魄缚。
  • const命令聲明的常量也是不提升宝与,存在暫時性死區(qū)焚廊,只能在聲明的位置后面使用。
  • const聲明的常量與let一樣不可重復(fù)聲明习劫。
  • 對于復(fù)合類型的變量咆瘟,變量名不指向數(shù)字,而是志向地址诽里。const只需保證地址不變袒餐,數(shù)據(jù)可變。
const a = [];
a.push("abc");  //可執(zhí)行
a.length = 0;    //可執(zhí)行
a = ['Dave'];     //報(bào)錯
  • 如想講對象凍結(jié)谤狡,使用object.freeze方法
const foo = object.freeze({});
//常規(guī)模式時灸眼,下一行不起作用;
//嚴(yán)格模式時墓懂,改行報(bào)錯焰宣。
foo.prop = 123;

4. 頂層對象的屬性

  • ES5中,頂層對象的屬性與全局變量是等價的捕仔。(不推薦不聲明直接用變量)
  • ES6修正匕积,var命令和function命令聲明的全局變量,依舊是頂層對象的屬性榜跌;let命令闪唆、const命令、class命令聲明的全局變量钓葫,不屬于頂層對象的屬性苞氮。

5. 頂層對象

ES5的頂層對象,本身也是一個問題瓤逼,因?yàn)樗诟鞣N實(shí)現(xiàn)里面是不統(tǒng)一的。

  • 瀏覽器里面库物,頂層對象是window霸旗,但Node和Web Worker沒有window。
  • 瀏覽器和Web Worker里面戚揭,self也指向頂層對象诱告,但是Node沒有self。
  • Node里面民晒,頂層對象是global精居,但其他環(huán)境都不支持。

同一段代碼為了能夠在各種環(huán)境潜必,都能取到頂層對象靴姿,現(xiàn)在一般是使用this變量,但是有局限性磁滚。

  • 全局環(huán)境中佛吓,this會返回頂層對象宵晚。但是,Node模塊和ES6模塊中维雇,this返回的是當(dāng)前模塊淤刃。
  • 函數(shù)里面的this,如果函數(shù)不是作為對象的方法運(yùn)行吱型,而是單純作為函數(shù)運(yùn)行逸贾,this會指向頂層對象。但是津滞,嚴(yán)格模式下铝侵,這時this會返回undefined。
  • 不管是嚴(yán)格模式据沈,還是普通模式哟沫,new Function('return this')(),總是會返回全局對象锌介。但是嗜诀,如果瀏覽器用了CSP(Content Security Policy,內(nèi)容安全政策)孔祸,那么eval隆敢、new Function這些方法都可能無法使用。

下面是兩種勉強(qiáng)可以使用的方法崔慧。

// 方法一
(typeof window !== 'undefined'
   ? window
   : (typeof process === 'object' &&
         typeof require === 'function' &&
         typeof global === 'object')
         ? global 
          : this);
// 方法二
var getGlobal = function () {
   if (typeof self !== 'undefined') { return self; }
   if (typeof window !== 'undefined') { return window; }
   if (typeof global !== 'undefined') { return global; } 
  throw new Error('unable to locate global object');
};

現(xiàn)在有一個[提案]拂蝎,在語言標(biāo)準(zhǔn)的層面,引入global作為頂層對象惶室。也就是說温自,在所有環(huán)境下,global都是存在的皇钞,都可以從它拿到頂層對象悼泌。

// CommonJS的寫法
require('system.global/shim')();

// ES6模塊的寫法
import shim from 'system.global/shim'; shim();

下面代碼將頂層對象放入變量global中

// CommonJS的寫法
var global = require('system.global')();

// ES6模塊的寫法
import getGlobal from 'system.global';
const global = getGlobal();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市夹界,隨后出現(xiàn)的幾起案子馆里,更是在濱河造成了極大的恐慌,老刑警劉巖可柿,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸠踪,死亡現(xiàn)場離奇詭異,居然都是意外死亡复斥,警方通過查閱死者的電腦和手機(jī)营密,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來永票,“玉大人卵贱,你說我怎么就攤上這事滥沫。” “怎么了键俱?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵兰绣,是天一觀的道長。 經(jīng)常有香客問我编振,道長缀辩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任踪央,我火速辦了婚禮臀玄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘畅蹂。我一直安慰自己健无,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布液斜。 她就那樣靜靜地躺著累贤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪少漆。 梳的紋絲不亂的頭發(fā)上臼膏,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機(jī)與錄音示损,去河邊找鬼渗磅。 笑死,一個胖子當(dāng)著我的面吹牛检访,可吹牛的內(nèi)容都是我干的始鱼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼脆贵,長吁一口氣:“原來是場噩夢啊……” “哼风响!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丹禀,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鞋怀,沒想到半個月后双泪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡密似,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年焙矛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片残腌。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡村斟,死狀恐怖贫导,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蟆盹,我是刑警寧澤孩灯,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站逾滥,受9級特大地震影響峰档,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寨昙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一讥巡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舔哪,春花似錦欢顷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至外里,卻和暖如春怎爵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盅蝗。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工鳖链, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人墩莫。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓芙委,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狂秦。 傳聞我的和親對象是個殘疾皇子灌侣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

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