爲什麼這部作品在jQuery的:爲什麼在jQuery的.change()中需要包裝到函數中?
$('#selCars').change(function(){
alert("I have changed!");
})
,但不是這一個:
$('#selCars').change(alert("I have changed!"));
爲什麼這部作品在jQuery的:爲什麼在jQuery的.change()中需要包裝到函數中?
$('#selCars').change(function(){
alert("I have changed!");
})
,但不是這一個:
$('#selCars').change(alert("I have changed!"));
你傳遞一個函數引用.change()
。你的第二個例子只有代碼,而不是函數引用。
你的第一個例子工作是因爲它傳遞了一個函數引用,它是必需的。
函數引用是必需的,因爲這是一個將在稍後調用的回調函數。立即執行的.change()
函數需要將回調引用保存到它自己的變量中,然後在實際發生更改事件時再調用它。要做到這一點,它需要一個函數在稍後的時間調用,而不是一段原始代碼。因此,.change()
被寫爲需要函數引用。這就是指定和編寫它的開發者設計它的方式。如果你想要它的工作,你必須遵守他們的規則。
但也許問題是,「爲什麼我傳遞函數引用而不是直接調用函數」。 ;-) –
謝謝你的回答,這是比侮辱意向的人更多的信息和教育。分享這些知識實際上向我們展示了(初學者)正確的道路。 –
因爲它是一個callback,即你傳遞的東西,以後叫回來,所以你傳遞什麼是一個函數的引用,並引用將被存儲,並要求當事件將觸發 。
change方法不存儲某些代碼,它只存儲指向該函數的指針。你的功能被稱爲事件處理程序。
這是因爲.change()將一個事件處理程序附加到一個元素。處理程序將不會被調用,直到事件發生。
因爲在JavaScript中,函數只是另一種數據類型,你也可以這樣做:
var handler = function(event) {
alert("I have changed!");
}
$('#selCars').change(handler);
注意handler
是一個函數,而警報()將只返回undefined
。
這不是關於jQuery的。你應該首先學習Javascript的基礎知識,獲得一本好書。我不想侮辱你。 – kapa
或者瀏覽https://developer.mozilla.org/en/JavaScript/Guide –
@bazmegakapa:你對你的評論是正確的;在使用Stackoverflow之前,我應該考慮一下。 – pencilCake