2017-08-29 30 views
2

對不起,很難拿出一個標題。我仍然對JavaScript不熟悉,有些事情讓我感到困惑。在JavaScript中,當執行getElementById()。onclick = function時,爲什麼function()不是必需的?

這裏是我的代碼

function getRandom() { 
    document.getElementById('divtest').innerHTML = (Math.floor(Math.random()* 20)) 
} 

document.getElementById('buttontest').onclick = getRandom 

所以,通常情況下,在文檔中的某個地方調用函數時,或者就在HTML中添加的onclick =「myFunction的()」即使,我需要寫myFunction的( ),與paranthese。

但是在這裏,當我在getElementById上執行.onclick時,如果我寫= getRandom(),我的代碼就不起作用,它需要成爲= getRandom,如我的代碼段所示。

這是爲什麼?

謝謝!

+0

您正在傳遞該函數的引用。如果你要編寫getRandom(),你會傳遞從函數返回的任何東西,因爲你在onclick發生之前調用函數 – baao

+0

https://quirksmode.org/js/events_tradmod.html#link2 – Bergi

+1

你需要了解差異在**函數調用**和**函數引用**之間,'myFunction()'將執行函數,'myFunction'將通常在給某個函數調用某個函數時給出保證 – Nemani

回答

2

通過做()您可以調用一個函數。在你的情況下,如果你添加()然後你調用getRandom,結果,undefined,將被分配到onclick事件處理程序。所以你想分配函數本身。考慮例如:

var func = function() { return 2 } 
console.log(func) //=> ƒ() { return 2 } 
console.log(func()) //=> 2 
2

在Javascript中,您正在傳遞對函數的引用,而不是調用它(這會將函數的返回值添加爲回調函數)。

而在HTML中定義回調函數時,您正在將完整的調用寫入HTML元素屬性中。

+1

JS中沒有指針。請將其稱爲「參考」或「功能對象」。 – Bergi

+0

@Bergi好點 – neuhaus

+0

你的意思的一個例子也可以在這裏有所幫助。理解函數引用對於剛學習的人來說可能很困難。 – axlj

0

onClick是一種「指點」,其包含是當元素上遇到一個click事件來運行代碼的功能。這不是一個正常的「調用」功能,你會得到一些價值作爲回報。在那裏你會使用括號。在這裏,無論如何,您都將該函數設置爲click事件的處理程序。

相關問題