2011-10-12 71 views
0

爲什麼這部作品在jQuery的:爲什麼在jQuery的.change()中需要包裝到函數中?

$('#selCars').change(function(){ 
    alert("I have changed!"); 
}) 

,但不是這一個:

$('#selCars').change(alert("I have changed!")); 
+1

這不是關於jQuery的。你應該首先學習Javascript的基礎知識,獲得一本好書。我不想侮辱你。 – kapa

+1

或者瀏覽https://developer.mozilla.org/en/JavaScript/Guide –

+0

@bazmegakapa:你對你的評論是正確的;在使用Stackoverflow之前,我應該考慮一下。 – pencilCake

回答

3

你傳遞一個函數引用.change()。你的第二個例子只有代碼,而不是函數引用。

你的第一個例子工作是因爲它傳遞了一個函數引用,它是必需的。

函數引用是必需的,因爲這是一個將在稍後調用的回調函數。立即執行的.change()函數需要將回調引用保存到它自己的變量中,然後在實際發生更改事件時再調用它。要做到這一點,它需要一個函數在稍後的時間調用,而不是一段原始代碼。因此,.change()被寫爲需要函數引用。這就是指定和編寫它的開發者設計它的方式。如果你想要它的工作,你必須遵守他們的規則。

+0

但也許問題是,「爲什麼我傳遞函數引用而不是直接調用函數」。 ;-) –

+0

謝謝你的回答,這是比侮辱意向的人更多的信息和教育。分享這些知識實際上向我們展示了(初學者)正確的道路。 –

2

因爲它是一個callback,即你傳遞的東西,以後叫回來,所以你傳遞什麼是一個函數的引用,並引用將被存儲,並要求當事件將觸發

change方法不存儲某些代碼,它只存儲指向該函數的指針。你的功能被稱爲事件處理程序

1

這是因爲.change()將一個事件處理程序附加到一個元素。處理程序將不會被調用,直到事件發生。

因爲在JavaScript中,函數只是另一種數據類型,你也可以這樣做:

var handler = function(event) { 
    alert("I have changed!"); 
} 
$('#selCars').change(handler); 

注意handler是一個函數,而警報()將只返回undefined

相關問題