JavaScript调用不带括号的函数
几周前,我痛苦地将按钮动态添加到一个拥有自己的.on('click')…处理程序的HTML DOM对象中,并使用e.stoppropigation阻止这些新的子元素触发事件 我做的一件奇怪的事情是调用一个没有任何括号的函数。我不知道我为什么这样做,为什么它工作,或者为什么它在附加括号时不工作。我想知道我是不是在侥幸而不是在设计(现在我要给它添加注释) 它是这样的:JavaScript调用不带括号的函数,javascript,jquery,Javascript,Jquery,几周前,我痛苦地将按钮动态添加到一个拥有自己的.on('click')…处理程序的HTML DOM对象中,并使用e.stoppropigation阻止这些新的子元素触发事件 我做的一件奇怪的事情是调用一个没有任何括号的函数。我不知道我为什么这样做,为什么它工作,或者为什么它在附加括号时不工作。我想知道我是不是在侥幸而不是在设计(现在我要给它添加注释) 它是这样的: //Container is the parent element // var buttons stores the button
//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);
});
那么,用参数调用而不是我调用是什么意思呢?这是无效或不正确的语法吗?这似乎是一种非常复杂的方式。有什么原因吗?是的。这样你就可以将函数用作委托。例如,你可以使用同一个单击处理程序并将其附加到多个单击事件。