2016-01-25 239 views
-1

你能向我解釋爲什麼這段代碼顯示錯誤,並且不打印任何東西嗎?此代碼不打印任何內容

var myObject = { 
    test: "bar", 
    myfunc: function() { 
    var self = this; 
    console.log("outer myfunc: this.test = " + this.test); 
    console.log("outer myfunc: self.test = " + self.test); 
    (function() { 
     console.log("inner myfunc: this.test = " + this.test); 
     console.log("outer myfunc: self.test = " + self.test); 
    }()); 
    } 
}; 

它沒有錯誤編譯成功,但運行後,僅打印未定義的字符串

+1

你能顯示你的函數調用代碼嗎? –

+1

你是什麼意思編譯? JS解釋! –

+2

你在哪裏/如何調用你的函數?這個代碼本身並沒有做任何事情。 –

回答

0

您正在創建可以在未來調用的函數。但是你並沒有真的叫它。你需要調用它。

//Here's where you create your function 
var myObject = { 
    test: "bar", 
    myfunc: function() { 
    var self = this; 
    console.log("outer myfunc: this.test = " + this.test); 
    console.log("outer myfunc: self.test = " + self.test); 
    (function() { 
     console.log("inner myfunc: this.test = " + this.test); 
     console.log("outer myfunc: self.test = " + self.test); 
    }()); 
    } 
}; 

//Now that you've created your function, you can use it. 
myObject.myFunc(); 

tutorial中的「調用JavaScript函數」部分可能會有幫助。

-1

除非你使用myfunc,這可以通過從myObject訪問myFunc,就像訪問來完成您的代碼將不再打印一個對象屬性。因此,隨着您現有的代碼,寫入以下任何地方:

myObject.myfunc(); 

哪應該顯示您所期望的控制檯輸出。如果您發現超出此範圍的任何錯誤,請通過添加下面的評論讓我知道。

+0

謝謝,輸出爲myfunc:this.test = bar outer myfunc:self.test = bar inner myfunc:this.test = undefined outer myfunc:self.test = bar –

0

在第3行上,您已在對象myObject上定義了一個方法myFunc。這將只有console.log當您調用myObject.myfunc();

在第7行,你創建一個IIFE。這定義了一個函數並立即調用它。當您調用myObject.myfunc();

myFunc在全局範圍內不存在時,這也將只有console.log。它是一個連接到myObject的方法。

console.log("outer myfunc: this.test = " + this.test);

console.log("outer myfunc: self.test = " + self.test);

這裏在線路5和6 selfthis將始終指代相同的對象。如果您調用函數myObject.myfunc();,那麼this.testself.test都將計算爲"bar"。現在

,如果你做setTimeout(myObject.myfunc, 0);那麼這兩個selfthis將參考這樣test將不確定的window對象(window.test當前未定義)。這是因爲this對象是在Javascript中的運行時動態確定的。將myObject.myfunc註冊爲回調將評估爲指向所定義函數的指針。在這種情況下調用你的myfunc將是一個免費函數調用 - 沒有myObject作爲this上下文它將默認爲window對象。

console.log("inner myfunc: this.test = " + this.test);

console.log("outer myfunc: self.test = " + self.test);

在8號線和9 this總是指window對象和打印undefined,除非你指定test到窗口。 Self將遵循上面解釋的模式。