传递回调与函数之间的区别

时间:2016-10-12 20:25:00

标签: javascript jquery

我很好奇,下面两个函数有什么区别吗?

ready时只有一个函数在匿名函数内传递,而另一个函数在ready时传递一个实际的命名函数?

示例:

<p>Not loaded yet.</p>

第一种方法:

function newName() {
  $( "p" ).text("The DOM is now loaded and can be manipulated.")
}

$(document).ready(function() {
  newName()
});

第二种方法:

function newName() {
  $( "p" ).text( "The DOM is now loaded and can be manipulated.")
}

$(document).ready(newName());

一个比另一个更正确吗?

2 个答案:

答案 0 :(得分:2)

  

ready时只有一个函数在匿名函数内传递,而另一个函数在ready时传递一个实际的命名函数?

是和否。

  我很好奇,这两者有什么不同吗?

第一个是传递一个在事件触发时执行的回调函数。当解释甚至火灾时here

后者传递已解析的返回值(undefined,因为newName没有返回语句),这与第二个相同。它将返回值传递给ready的原因是因为您调用函数立即(可能看似有效),然后传递返回值。要使它们功能等效,请执行:

$(document).ready(newName);

这将传递函数引用,并且不会调用它。另外,如前所述,调用ready(func(); func2();)不是有效的语法。

答案 1 :(得分:1)

实际上

之间没有区别
$(document).ready(function(){
  newName();
});

$(document).ready(newName);

存在一个小的技术差异:在第一个代码段中,传递了一个名为newName的匿名函数,在第二个代码段中,传递了命名函数newName 本身

函数只是可调用的对象,可以通过它们的名称或包含该函数的变量的名称来引用。

请注意,$(document).ready(newName());正在调用newName - 立即 - 并将返回值传递给ready。这只有在newName返回另一个函数时才有意义,在这种情况下它不会。

标题还提到$(document).ready(newName){}之类的内容。我假设这是一个错字,因为那不是有效的语法。

$(document).ready(newName(); otherName(); otherName1());也不是有效的语法。