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

调用javascript方法的两种方法之间有什么区别,javascript,html,Javascript,Html,我正在学习JavaScript并试图理解它。这对你来说可能很简单,但我确实需要解释。这是我的java脚本文件代码 function divClick(){ alert("Hello World!!!"); } 所以如果我这样称呼它 $(document).ready(function(){ $("div").click(function(){ divClick(); });}); function divClick(){ return function(){ al

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

function divClick(){
alert("Hello World!!!");
}
所以如果我这样称呼它

$(document).ready(function(){
$("div").click(function(){
    divClick();
});});
function divClick(){
   return function(){ 
      alert("Hello World!!!");
   }
}
一切正常,只有当我点击div元素时,警报框才会出现。但如果我像这样访问它

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

页面加载后,警报框将自动显示。我真的不明白,你能解释一下吗。如果有任何url,我很乐意学习。

第二个url会立即调用
divClick()
,并将返回的内容作为
.click()
回调处理程序传递

改用这个:

$("div").click(divClick);

这里,我们将一个函数引用作为事件处理程序。

< P>就像许多编程语言(Python、java、C++、C++等),当你有一个函数调用,比如

foo(a, b, ...);
首先计算所有表达式
a
b
等,然后将其结果作为参数传递给
foo

万一

$("div").click(function(){
    divClick();
});
表达式是
function(){divClick();}
,这是一个函数表达式。计算结果是一个函数(对象)。因此,函数被传递到
。单击

$("div").click(divClick());
表达式是
divClick()
,这是一个函数调用。这意味着执行函数
divClick
,它返回的任何内容都将传递给
。click


简化示例:

function a(arg) {
    alert(arg);
}

function b() {
    return 42;
}

a(b()); // alerts 42
这里首先执行
b
,其返回值为
42
。此值作为参数传递给
a
,并可在函数中作为
arg
访问


如果有任何网址,我会很高兴地学习它

这真的没什么特别的。函数调用是如何计算的。也许你会对作为参数传递的函数感到困惑。在JavaScript中,函数是一级公民,可以像任何其他值(数字、布尔值、字符串等)一样传递

关于函数的阅读材料:


当您注册一个事件时,在本例中,单击
,输入是对事件发生时应调用的函数的引用。在第一种情况下,您定义的是匿名函数。但是,在第二种情况下,
divClick()
不是引用,因此它计算并期望函数
divClick
返回引用。在评估过程中,您的方法实际上会被调用,从而导致行为。

补充了Felix Kling的答案 你可以改变

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

通过这种方式,您传递的是一个名为“divClick”的函数对象,而不是返回值“divClick()”,在本例中为nothing

另一个肮脏的工作方式是改变函数

$(document).ready(function(){
$("div").click(function(){
    divClick();
});});
function divClick(){
   return function(){ 
      alert("Hello World!!!");
   }
}

非常感谢,你能给我推荐一些好书或网址让我学习吗?在再次分享代码之前,请先学习如何进行适当的缩进。很抱歉,下次我会处理的。谢谢指点out@zerkms:谢谢,我改正了。你说得完全正确,非常感谢你的详细解释。