$('button').click(function(){ console.log('works'); });
单击所需按钮时,此输出“有效”。
但是如果我在一个函数中打包相同的代码并用附加到它的括号调用它(因为你通常调用一个函数),就像在
中一样function worker(){ console.log('works'); }
$('button').click(worker());
worker 在没有点击按钮的情况下被解雇。但如果我避开括号,就像在
中一样function worker(){ console.log('works'); }
$('button').click(worker);
我正在获得所需的功能。为什么单击处理程序会以这种方式运行?
答案 0 :(得分:1)
当你在没有括号的JavaScript 中调用函数时,你正在做的是指定实际的函数。这不会立即执行该功能。
当您使用括号调用JavaScript 中的函数时,您立即执行函数并返回该函数的值。
话虽如此,如果你有一个函数返回一个函数本身,你实际上可以调用一个函数,其返回值将是另一个函数。 (一般不建议)
解决你的评论:
假设您编写以下语句:$('button').click(console.log('works'));
结果是,只要您的页面被加载,"工作"将打印到控制台。这是因为console.log()
是一个名为的函数,带有括号。
但是,如果您采用以下方法:
var worksFunc = function() {console.log('works')};
$('button').click(worksFunc);
现在将引用要在click
事件上执行的函数。
<强> DEMO 强>
答案 1 :(得分:1)
你没有用worker()
传递函数对象,括号让它直接执行。删除括号将允许您通过名称worker
将参考传递给函数。
如果以这种方式看待它可能会更清楚:
var worker = function() { console.log('works'); }
$('button').click(worker);