2014-03-01 40 views
0
<button onclick="test()">Will it work?</button> 


function test() { 
this.innerHTML = "It works!"; 
} 

該按鈕調用功能測試,所以它應該受到「this」關鍵字的影響。爲什麼不在這裏使用「this」關鍵字?

+0

你覺得**這是什麼* * 應該?按照原樣查看代碼,** this **引用全局對象,而不是按鈕元素。 [更多信息](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope) – alexK85

回答

1

MDN documentation

裏面的函數,這個值取決於函數是如何被調用。

簡單的通話

function f1(){ 
    return this; 
} 

f1() === window; // global object 

在這種情況下,this的價值不是由呼叫建立。由於代碼不是嚴格模式,因此this的值必須始終爲對象,因此它默認爲全局對象。

所以,當你調用一個函數作爲func()this指的是全局對象。而這正是你在這裏做什麼:

onclick="test()" 

你是正確的,this在事件處理中參照處理程序綁定到元素,但test不是事件處理程序,它是在一個事件處理程序。從屬性值產生的處理程序將看起來像

function(event) { 
    test(); 
} 

所以你看,這是一個「簡單的調用」,所以沒有什麼this指問題。


如果你想擁有它指的是按鈕,然後就可以用.call,調用test並明確設置this來傳遞的值:

onclick="test.call(this)" 
相關問題