为什么需要在jQuery的.change()中包装成一个函数
Why wrapping into a function is required in .change() of jQuery?
为什么在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
。
相关文章:
- 如何使用图表包装函数有条件地格式化谷歌可视化表单元格
- 从原型更改/包装函数
- 我正在尝试使用 html 元素包装函数的返回值
- 将 ajax .done 作用域扩展到包装函数
- 在javascript中需要帮助包装函数并正确处理“this”
- 包装函数后无法读取属性
- 检查是否调用了包装函数
- 从生成器函数中包装co和co-mysql,并从包装函数中让步
- 窗口对象上具有全局变量的包装函数
- 使用removeEventListener删除包装函数回调
- 用JavaScript正确包装函数
- 如何从包装函数返回javascript ajax调用的结果
- 如何包装函数调用,有时做异步调用,使其行为同步
- 为什么UnderscoreJS有很多原生Javascript函数的包装函数?
- Knockout - keyCode属性没有通过包装函数传递
- Highcharts包装函数'
- 中间javascript: ajax请求的包装函数稍后执行主函数
- 是否有一种聪明的方法来访问包装函数中的变量
- Jquery新手在包装函数时遇到问题
- express 4的异步包装函数没有't捕获错误