預(yù)解釋的變態(tài)機制

首先先了解一個知識點:in: "num" in window, 判斷num是否是window這個對象的一個屬性,是的話返回true,不是的話返回false。

    var obj = {
        name: 'derrick',
        age: 20
    };
    console.log('name' in obj); // -> 返回true
    console.log('eat' in obj); // -> 返回false

預(yù)解釋的時候不管條件是否成立,都要把帶var的進行提前的聲明
window的預(yù)解釋: var num; -> 給window.num;。

    if (!("num" in window)) { // false
        var num = 12;
    }
    console.log(num); // -> undefined

預(yù)解釋的時候,只對"="左邊的預(yù)解釋,右邊的是值,不參與預(yù)解釋
**匿名函數(shù)之函數(shù)表達式: **把函數(shù)的定義的部分當(dāng)做一個值賦值給變量/ 元素的某一個事件。
window下的預(yù)解釋: var fn;。

    fn(); // -> undefined() -> TypeError
    // 相當(dāng)于: var fn; fn() -> 出錯
    var fn = function () {
        console.log('ok');
    }

自執(zhí)行函數(shù)定義的那個function在全局作用域下不進行預(yù)解釋,當(dāng)代碼執(zhí)行到這個位置的時候,定義和執(zhí)行一起完成了

    // 自執(zhí)行函數(shù):定義和執(zhí)行一起完成了
    (function (num) {
        console.log(num);
    })(100);

函數(shù)體中,return下面的代碼,雖然不再執(zhí)行了,但是需要進行預(yù)解釋;return后面跟著的是函數(shù)返回值,所以不進行預(yù)解釋

    function fn() {
        // 預(yù)解釋: var num;
        console.log(num); // -> undefined
        return function () {
            // 這里不進行預(yù)解釋
        }
        var num = 100;
    }
    fn();

在預(yù)解釋的時候,如果名字已經(jīng)聲明過了,不需要重新的聲明,但是需要重新的賦值
在JavaScript中,如果變量的名字和函數(shù)的名字重復(fù)了,也算沖突。
預(yù)解釋: var fn; window.fn; fn = xxxff000; window.fn = xxxff000;。

    var fn = 12;
    function fn() {
        console.log('ok');
    }
    console.log(fn); // 12
    // window預(yù)解釋:
    // 聲明+定義: fn = xxxff111
    // 聲明 var fn; (不需要重新聲明)
    // 聲明(不重新聲明)+定義: fn = xxxff222
    // -> fn = xxff222
    fn(); // -> 2
    function fn() {
      console.log(1);
    }
    fn();  // -> 2
    var fn = 10;
    fn(); // TypeError
    function fn() {
        console.log(2);
    }
    fn(); // -> 上面代碼出錯,此時不不執(zhí)行了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是javascript的預(yù)解釋? 在當(dāng)前作用域下,JS代碼執(zhí)行之前,瀏覽器會對帶var的和function的進...
    知識搬運工horace閱讀 432評論 0 0
  • 繼承 一、混入式繼承 二、原型繼承 利用原型中的成員可以被和其相關(guān)的對象共享這一特性,可以實現(xiàn)繼承,這種實現(xiàn)繼承的...
    magic_pill閱讀 1,138評論 0 3
  • 在ES6之前,變量使用var聲明,會存在變量的預(yù)解析(函數(shù)也有預(yù)解析),我相信很多同學(xué)在剛開始學(xué)JavaScrip...
    iceman_dev閱讀 8,762評論 5 34
  • @轉(zhuǎn)自GitHub 介紹js的基本數(shù)據(jù)類型。Undefined、Null、Boolean、Number、Strin...
    YT_Zou閱讀 1,330評論 0 0
  • 1,javascript 基礎(chǔ)知識 Array對象 Array對象屬性 Arrray對象方法 Date對象 Dat...
    Yuann閱讀 1,158評論 0 1

友情鏈接更多精彩內(nèi)容