ES6.1--let,const,塊級(jí)作用域

let命名

  1. 所聲明的變量只在命令所在的代碼塊內(nèi)有效
{
    let a = 1;
    var b = 2;
    console.log(a) //  1
    console.log(b) //  2
}
console.log(a) //  a is not defined
console.log(b) //  2
  1. 使用let聲明的命令變量在域解析的時(shí)候不會(huì)被提升
{
    console.log(b);  // b is not defined
    let b = 2;
}
{
    let f = 10;
    function fn(){
        f = 7;
        let f = 2;  //  暫時(shí)性死區(qū)
    }
    fn();
}
  1. let不允許在同一個(gè)作用域下聲明已經(jīng)存在的變量
{
    let a = 1;
    let a = 2;  //報(bào)錯(cuò) 'a' has already been declared
}
  1. let在循環(huán)中應(yīng)用
for ( let i = 0; i < btns.length; i++){
    btns[i].onclick = function(){
        console.log(i)  //0,1,2,3,4....
        //在這里鲸伴,let與var的區(qū)別是:let只是在循環(huán)之中的崇败,而var在整個(gè)函數(shù)之中
    }
}
console.log(i)   // i is not defined

var a = [];
for ( var i = 0 ; i< 10 ; i ++){
    a[i] = function(){
        console.log(i)
    }
}
a[6]();  // 10

var b = [];
for ( let i = 0; i < 10; i ++){
    b[i] = function(){
        console.log(i)
    }
}
b[6]();   // 6
  1. 暫時(shí)性死區(qū) 使用let命令聲明變量之前碎税,該變量不能使用
var tmp = 123;
if ( true){
    tmp = 'abc';   // tmp is not defined   
    let tmp;       // 在這個(gè)代碼塊中定義了tmp
}

let tmp2 = 123;
if (true){
    tmp2 = 'abc';
    console.log(tmp2)
}
console.log(tmp2)

塊級(jí)作用域

  1. 為什么需要塊級(jí)作用域

    • 內(nèi)層變量可能會(huì)覆蓋外層變量
    var tmp = new Date();
    function f(){
        console.log(tmp);
        if (false){
            var tmp = "hello"   
        }
    }
    f();    //  undefined
    
    • 用來計(jì)數(shù)的循環(huán)變量泄露為全局變量
  2. ES6 的塊級(jí)作用域

    • 外層作用塊不受內(nèi)層作用塊的影響
    function f(){
        let n = 5;
        if ( true){
            n = 10
        }
        console.lo(n)    //  5   外層作用塊不受內(nèi)層作用塊的影響
    }
    
    • 外層作用域無法訪問內(nèi)層作用域的變量
    {let now = '1213'}
    console.log(now)   // now is not defined
    
    • 內(nèi)層作用域可以定義外層作用域相同的變量
    {{
        let name = 'dan'
        {
            let name = 'xxi'
        }
    }}
    
    • 立即執(zhí)行的匿名函數(shù)(IIFE)不再有必要
    /*(function(){
        console.log('asdklfj');
        document.body.backgroundColor = '#f5f5f5';
    })()*/
    
    {
        console.log('jaflkajsd');
    }
    
    • 內(nèi)部聲明的函數(shù)不會(huì)影響到外部聲明
    {
        let a = 'secret';
        function f(){
            return a
        }
    }
    f()    //報(bào)錯(cuò)
    
    let f;
    let b = 'bbb'
    {
        let a = 'dan';
        f = function(){
            return a;
        }
        console.log(b);    //  內(nèi)層作用塊還是可以拿到外層作用塊的內(nèi)容
    }
    console.log(f());
    

const命名

  1. const 聲明的變量一旦聲明,其值就不能發(fā)生改變拔妥,一旦聲明常量抄肖,就必須初始化咒锻,不能留到以后賦值
const PI = 3.1415;
PI = 3;    // 報(bào)錯(cuò)
  1. 聲明的常量只在其所在的代碼塊內(nèi)有效府框,

  2. 聲明的常量不會(huì)被提升,同樣有暫時(shí)性死區(qū)若厚,只能在聲明后使用

  3. 不能聲明已經(jīng)聲明過的常量或者變量

注:

  1. 聲明的時(shí)候必須賦值
  2. 聲明的常量?jī)?chǔ)存簡(jiǎn)單的數(shù)據(jù)類型是不可改變其值拦英,如果儲(chǔ)存的是對(duì)象,那么引用不可改變测秸,至于對(duì)象里數(shù)據(jù)怎么改變是沒有關(guān)系的
const obj = { a: 10};
obj.a = 20;
console.log(obj) // {a: 20}

const a = [];
a.push('hello');  // 可以執(zhí)行
a.length = 0;    // 可以執(zhí)行
a = ["dan"]      // 報(bào)錯(cuò)
  1. 如果想將對(duì)象凍結(jié)疤估,使用Object.freeze({});
const foo = Object.freeze({});
foo.prop = 123; // 不起作用
console.log(foo.prop)   // undefined


var constantize = (obj) => {
    Object.freeze(obj);
    Object.keys(obj).forEach((key,value) => {
        if ( typeof obj[key] === 'object'){
            constantize(obj[key])
        }
    })
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灾常,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子做裙,更是在濱河造成了極大的恐慌岗憋,老刑警劉巖肃晚,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锚贱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡关串,警方通過查閱死者的電腦和手機(jī)煞躬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門撑螺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事蜜徽。” “怎么了紊扬?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵睛榄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我落剪,道長(zhǎng)睁本,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任忠怖,我火速辦了婚禮呢堰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凡泣。我一直安慰自己枉疼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布鞋拟。 她就那樣靜靜地躺著骂维,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贺纲。 梳的紋絲不亂的頭發(fā)上席舍,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音哮笆,去河邊找鬼来颤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛稠肘,可吹牛的內(nèi)容都是我干的福铅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼项阴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼滑黔!你這毒婦竟也來了笆包?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤略荡,失蹤者是張志新(化名)和其女友劉穎庵佣,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汛兜,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巴粪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粥谬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肛根。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漏策,靈堂內(nèi)的尸體忽然破棺而出派哲,到底是詐尸還是另有隱情,我是刑警寧澤掺喻,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布芭届,位于F島的核電站,受9級(jí)特大地震影響感耙,放射性物質(zhì)發(fā)生泄漏褂乍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一抑月、第九天 我趴在偏房一處隱蔽的房頂上張望树叽。 院中可真熱鬧,春花似錦谦絮、人聲如沸题诵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽性锭。三九已至,卻和暖如春叫胖,著一層夾襖步出監(jiān)牢的瞬間草冈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工瓮增, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怎棱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓绷跑,卻偏偏與公主長(zhǎng)得像拳恋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砸捏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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