两种调用javascript方法的方法有什么区别

时间:2013-04-29 23:29:18

标签: javascript html

我正在学习JavaScript并尝试理解它。这对你来说可能很简单,但我确实需要解释。所以这是我的java脚本文件代码。

function divClick(){
alert("Hello World!!!");
}

所以,如果我这样称呼它

$(document).ready(function(){
$("div").click(function(){
    divClick();
});});

一切正常,仅当我点击div元素时才出现警告框。但如果我像

那样访问它
$(document).ready(function(){
$("div").click(divClick());});

一旦页面加载,警报框就会自动出现。我真的无法理解,你能解释一下吗?如果有任何网址,我会很乐意学习它。

4 个答案:

答案 0 :(得分:5)

与许多编程语言(Python,Java,C,C ++等)一样,当你有一个像

这样的函数调用时
foo(a, b, ...);

首先评估所有表达式ab等,然后将它们的结果作为参数传递给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!!!");
   }
}