鍍金池/ 問答/HTML/ JS執(zhí)行代碼

JS執(zhí)行代碼

圖片描述

請問這段代碼為什么會報(bào)錯?

回答
編輯回答
醉淸風(fēng)

你想要實(shí)現(xiàn)這樣吧

閉包寫法

  var obj = function () {
        var name = 'js';

        var dofun = function () {

        };
        return can = (function () {
            // console.log(obj);
            return name;

        })();
    }
    console.log(obj(), '1');

類寫法

class OBJ {
        constructor() {
            this.name = 'js';
        }

        can() {
            return this.name;
        }


        do() {


        }
    }
    var ob=new OBJ()

    console.log(ob.can(), '2');
2017年6月11日 09:13
編輯回答
情殺

var x = xx;這個表達(dá)式做了什么?他是先在內(nèi)存中聲明了一個變量,此時變量未作任何處理,所以值為undefined,然后會把右邊的結(jié)果賦值給左邊的變量。

用你的這個例子來講,先在內(nèi)存中聲明了一個變量obj,然后看右邊,右邊是一個對象,所以會在堆內(nèi)存中開辟一個空間,保存該對象,讀取到name:'js'的時候會為對象的name屬性賦值'js',當(dāng)讀取到下一行的時候,因?yàn)閏an屬性所對應(yīng)的是一個立即執(zhí)行函數(shù),所以會先得到函數(shù)的值,再賦值給can屬性,那么這個函數(shù)里面做了什么呢?這個函數(shù)首先打印了obj,此時obj剛剛聲明,還未被賦值,所以為undefined,所以讀取下一行obj.name的時候拋出錯誤。

2018年3月21日 20:18
編輯回答
離魂曲

clipboard.png

2018年8月28日 01:47