Javascript 为什么可以';我只是通过传递它的变量名来运行这个回调,但是我可以把它包装成一个函数吗?
只是一个简单的问题。根据我目前的理解,以下两段代码是相同的,除了一段包含在函数中。为什么它与方法1一起工作,而不是与方法2一起工作?有什么区别 方法1:Javascript 为什么可以';我只是通过传递它的变量名来运行这个回调,但是我可以把它包装成一个函数吗?,javascript,jquery,Javascript,Jquery,只是一个简单的问题。根据我目前的理解,以下两段代码是相同的,除了一段包含在函数中。为什么它与方法1一起工作,而不是与方法2一起工作?有什么区别 方法1: // Reset button $('.reset').button({ icons: {primary: 'ui-icon-closethick'} }).click(function(){groupList.change()}); 方法2: // Reset button $('.reset').button({ icon
// Reset button
$('.reset').button({
icons: {primary: 'ui-icon-closethick'}
}).click(function(){groupList.change()});
方法2:
// Reset button
$('.reset').button({
icons: {primary: 'ui-icon-closethick'}
}).click(groupList.change);
编辑:JSFiddle:-注意点击“两个”会抛出错误
uncaughttypeerror:Object#没有方法“on”
,“一个”很好,如果groupList.change
还不存在,但在稍后(但在用户点击之前)定义,那么就有区别了。如果以后重新定义,则相同
第一个代码解析为groupList。单击时更改
第二个代码解析组列表。立即更改。区别在于第一个代码将函数作为对象的方法调用,而第二个代码将函数作为独立函数调用
在第一种情况下,此
将引用函数中的组列表
对象,而在第二种情况下,此
将引用全局窗口
对象
如果调用一个函数,将其指定为对象成员,例如obj.method()代码>,它将作为方法调用。如果您获取对函数的引用并调用它,例如var m=obj.method;m()代码>,则该方法不再连接到对象
此外,正如Thilo指出的,第一个代码将在每次事件发生时查找该方法,而第二个代码将在事件绑定时查找该方法一次。groupList.change是在什么时候出现的?你能在某个地方做一个自包含的最小示例吗?另外,这取决于groupList.change实际上在做什么。@Thilo-我现在就在这里。更重要的区别可能在@Guffa的答案中找到。