javascript - 为什么我不能通过只传递它的变量名来运行这个回调,但我可以将它包装在一个函数中?

标签 javascript jquery

只是一个简单的问题。在我目前的理解中,除了其中一个包含在函数中之外,以下两段代码是相同的。为什么方法一有效,方法二无效?有什么不同?

方法一:

// Reset button
$('.reset').button({
    icons: {primary: 'ui-icon-closethick'}
}).click(function(){groupList.change()});

方法二:

// Reset button
$('.reset').button({
    icons: {primary: 'ui-icon-closethick'}
}).click(groupList.change);

编辑: JSFiddle:http://jsfiddle.net/B8YEa/2/ - 请注意单击“两个”如何引发错误 Uncaught TypeError: Object #<HTMLButtonElement> has no method 'on'和“一个”就好了,以及选择的实际变化

最佳答案

不同之处在于,第一段代码将函数作为对象的方法调用,而第二段代码将函数作为独立函数调用。

在第一种情况下,this 将引用函数内部的 groupList 对象,而在第二种情况下,this 将引用全局对象window 对象。

如果您调用一个函数并将其指定为对象成员,例如obj.method();,它将作为一个方法被调用。如果您获得对该函数的引用并调用它,例如var m = obj.method; m();,则该方法不再连接到对象。


另外,正如 Thilo 所指出的,第一段代码将在每次事件发生时查找方法,而第二段代码将在事件绑定(bind)时查找一次方法。

关于javascript - 为什么我不能通过只传递它的变量名来运行这个回调,但我可以将它包装在一个函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14455512/

相关文章:

javascript - MySQL SELECT 没有以正确的方式返回值,谷歌线图没有以所需的方式显示

jquery.datePicker 问题

jquery css颜色值返回RGB?

javascript - Bootstrap 4 选项卡未链接

javascript - 无法使用 Sinon stub 函数

javascript - 如何在 Kendo Grid 中的 url 列中显示带有模板的窗口

asp.net - JQuery 源脚本导致 "A script on this page is causing Internet Explorer to run slowly."消息

jquery - 窗口未定义,文档未定义- Electron

javascript - 使用 Web 蓝牙 API 获取广告数据

JavaScript:如何在用户选择注销时关闭所有子窗口?