JavaScript调用不带括号的函数

JavaScript调用不带括号的函数,javascript,jquery,Javascript,Jquery,几周前,我痛苦地将按钮动态添加到一个拥有自己的.on('click')…处理程序的HTML DOM对象中,并使用e.stoppropigation阻止这些新的子元素触发事件 我做的一件奇怪的事情是调用一个没有任何括号的函数。我不知道我为什么这样做,为什么它工作,或者为什么它在附加括号时不工作。我想知道我是不是在侥幸而不是在设计(现在我要给它添加注释) 它是这样的: //Container is the parent element // var buttons stores the button

几周前,我痛苦地将按钮动态添加到一个拥有自己的.on('click')…处理程序的HTML DOM对象中,并使用e.stoppropigation阻止这些新的子元素触发事件

我做的一件奇怪的事情是调用一个没有任何括号的函数。我不知道我为什么这样做,为什么它工作,或者为什么它在附加括号时不工作。我想知道我是不是在侥幸而不是在设计(现在我要给它添加注释)

它是这样的:

//Container is the parent element
// var buttons stores the buttons with class 'buttons'
$('.container').on('click', function(){
    $(buttons).appendTo($(this)).fadeIn(500).find('.buttons').click(tableButton);
});

function tableButton(e){
    e.stopPropagation();
    //do stuff

}
我不明白为什么我写了对tableButton的调用而没有任何争论,或者为什么它工作得很好

.find('.buttons').on('click', function(e){
  tableButton(e);
});
但是它不再起作用了


感谢您的帮助!

它之所以有效,是因为您正在将函数传递给单击处理程序,而不是自己调用函数(the()),例如:

var testFunction = function(msg) {
    alert(msg);
}

var functionCaller = function(functionToCall) {
    functionToCall('hello!');
}

functionCaller(testFunction);
functionCaller将消息参数传递给testFunction(),但我们只将testFunction传递给functionCaller(不带参数)

对于不起作用的部分,函数名不是tableButton()而不是tableButtons()


请参见

您实际上并没有调用它,您只是声明了它和它接受的参数。单击回调实际上是用一个参数调用的,但不是由您调用的

问题可能来自这样一个事实,即jQuery调用您的函数时,单击的元素绑定为
this
,您可以这样调用table按钮:

.find('.buttons').on('click', function(e){
     tableButton.call(this, e);
});

那么,用参数调用而不是我调用是什么意思呢?这是无效或不正确的语法吗?这似乎是一种非常复杂的方式。有什么原因吗?是的。这样你就可以将函数用作委托。例如,你可以使用同一个单击处理程序并将其附加到多个单击事件。