为什么需要在jQuery的.change()中包装成一个函数

Why wrapping into a function is required in .change() of jQuery?

本文关键字:包装 函数 一个 jQuery change 为什么      更新时间:2023-09-26

为什么在jQuery中工作:

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

但不是这个

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

传递一个函数引用给.change()。第二个例子只有代码,而不是函数引用。

你的第一个例子可以工作,因为它传递了一个函数引用,这是需要的。

函数引用是必需的,因为这是一个稍后将被调用的回调。立即执行的.change()函数需要将回调引用保存到它自己的变量中,然后在更改事件实际发生时调用它。要做到这一点,它需要一个稍后调用的函数,而不是一段原始代码。

并且,另一个答案是因为,.change()被编写为需要函数引用。这就是编写和规范它的开发人员设计它的方式。如果你想让它工作,你必须遵守他们的规则。

因为这是一个回调,也就是说,你传递的东西稍后会被调用,所以你要传递的是一个对函数的引用,并且该引用将被存储并在事件触发时调用

change方法不存储代码,它只存储指向函数的指针。您的函数被称为事件处理程序

这是因为.change()将事件处理程序附加到元素上。在事件发生之前,处理程序不会被调用。

因为在JavaScript中,函数只是另一种数据类型,你也可以这样做:

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

注意handler是一个函数,而alert()只会返回undefined