我正在学习JavaScript并尝试理解它。这对你来说可能很简单,但我确实需要解释。所以这是我的java脚本文件代码。
function divClick(){
alert("Hello World!!!");
}
所以,如果我这样称呼它
$(document).ready(function(){
$("div").click(function(){
divClick();
});});
一切正常,仅当我点击div元素时才出现警告框。但如果我像
那样访问它$(document).ready(function(){
$("div").click(divClick());});
一旦页面加载,警报框就会自动出现。我真的无法理解,你能解释一下吗?如果有任何网址,我会很乐意学习它。
答案 0 :(得分:5)
与许多编程语言(Python,Java,C,C ++等)一样,当你有一个像
这样的函数调用时foo(a, b, ...);
首先评估所有表达式a
,b
等,然后将它们的结果作为参数传递给foo
。
如果是
$("div").click(function(){
divClick();
});
表达式是function(){ divClick(); }
,它是函数表达式。评估它的结果是函数(对象)。因此,函数将传递给.click
。
在
的情况下$("div").click(divClick());
表达式为divClick()
,这是一个函数调用。这意味着函数divClick
已执行,并且它返回的任何内容都会传递给.click
。
简化示例:
function a(arg) {
alert(arg);
}
function b() {
return 42;
}
a(b()); // alerts 42
首先执行b
,其返回值为42
。该值作为参数传递给a
,并在函数中作为arg
。
如果有任何网址,我会很乐意学习它。
它真的没什么特别之处。这是函数调用的评估方式。也许你对作为参数传递的函数感到困惑。在JavaScript中,函数是一等公民,可以像任何其他值(数字,布尔值,字符串......)一样传递。
阅读有关功能的资料:
答案 1 :(得分:2)
第二个立即调用divClick()
并将其返回的内容作为.click()
回调处理程序传递。
请改用:
$("div").click(divClick);
这里我们将对函数的引用作为事件处理程序传递。
答案 2 :(得分:0)
当您注册事件时,在这种情况下click
,输入是对事件发生时应调用的函数的引用。在第一种情况下,您正在定义匿名函数。但是,在第二种情况下,divClick()
不是引用,因此它评估并期望函数divClick
返回引用。在评估期间,实际上会调用您的方法,从而调用行为。
答案 3 :(得分:0)
补充Felix Kling的答案 你可以改变
$(document).ready(function(){
$("div").click(divClick());
});
的
$(document).ready(function(){
$("div").click(divClick);
});
以这种方式传递一个名为" divClick"的函数对象。而不是" divClick()"的返回值;在这种情况下什么也没有。
其他脏的形式可以改变这样的功能
function divClick(){
return function(){
alert("Hello World!!!");
}
}