2016-11-15 115 views
0

請問這裏有人請直接爲我們所有人一勞永逸嗎?Javascript中的函數上下文和這個關鍵字

var parent = {child: function(){ 
     console.log(this); 
     var log = function(){ 
     console.log(this);}; 
     log(); 
    } 
} 

當我打電話parent.child() 我得到:在Mozilla

Object{} 
Window{} 

其他人/文檔說,這個功能已經沒有任何上下文中調用。並且

this 

將是調用函數的對象。 我不明白的是,如何在另一個對象內的這個函數被認爲沒有上下文(所以this默認爲全局對象)。這裏的邏輯是什麼?謝謝

+0

'log'被稱爲沒有上下文。如果你想用上下文調用它,你應該執行'log.call(this)'。如果沒有上下文,你會在嚴格模式下得到'window',而在嚴格模式下'undefined'。 – trincot

+0

http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – epascarello

+0

謝謝。我知道。我想知道的是如何在沒有上下文的情況下調用它。 – BlackLog

回答

0

對象引用的函數就像方法。當您通過索引對象直接調用某個函數時,該函數將生成的範圍中將引用該相同對象this

調用函數時沒有索引的對象,或沒有設置this上下文(與applybindcall,......),如果不是在嚴格模式(或者至少是在全球範圍內,當在嚴格模式)this應該是全局對象。

當對象是類/接口/函數的實例時,它們的方法也爲this捕獲同一個對象。

這是它的工作對我來說:

(function() { 
    'use strict' 
    console.log(this) // undefined 
})() 

console.log(this) // Window{}