Javascript-无法理解函数括号

Javascript-无法理解函数括号,javascript,Javascript,我对函数的调用方式感到困惑。有时它们以functionName()格式给出,有时只是名称functionName 例如,在HTML中,当我们调用onclick=“functionName()”时,但在Javascript中,我们只是将函数functionName作为参数传递给另一个函数。 setTimeout(functionName,1000) 下面是一本书中的一个例子,假设我们必须传递一个带参数的回调函数 var mySetTimeout = function(callback, delay

我对函数的调用方式感到困惑。有时它们以
functionName()
格式给出,有时只是名称
functionName

例如,在HTML中,当我们调用
onclick=“functionName()”
时,但在Javascript中,我们只是将函数
functionName
作为参数传递给另一个函数。
setTimeout(functionName,1000)

下面是一本书中的一个例子,假设我们必须传递一个带参数的回调函数

var mySetTimeout = function(callback, delay){
  var dollars = 100;
  callback(dollars);
};
var onCompletion = function(dollars,name){
  console.log(name + ": Here's your $" + dollars);
};
var getMoney = function (name) {
  var requestB = mySetTimeout(function(dollars){
    onCompletion(dollars,name);
  }, 1000);
};
getMoney('Simon');
mySetTimeout函数中,我们将回调作为参数传递,但其中没有任何内容。但稍后在mySetTimeout函数中,我们将传递带参数的回调函数


有人能给我解释一下所有的情况吗?谢谢

mySetimeout功能可通过两种方式使用:

语法:

var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);


希望这对你有所帮助:)

你需要了解一些关于回调函数、匿名函数等的知识才能理解这一点。在JS中使用匿名函数是非常常见的

我会尽量用最简单的方式向你解释。在代码的第一行:参考我的注释

var mySetTimeout = function(callback, delay){ // Note 01
  var dollars = 100;
  callback(dollars); // Note 02
};
注意01:这里,回调只不过是一个字符串参数。它不是一个函数,而是一个函数名。您告诉我您想运行一个名为“callback”的函数,并传递该名称。然后,只需调用,
callback()
,即可运行该函数,其中“callback”是您在上面传递给该函数的参数

注意02:在这里,您实际使用上面定义的名称运行函数

在这行代码中

  var requestB = mySetTimeout(function(dollars){
    onCompletion(dollars,name);
  }, 1000);
您可以看到,您没有定义“callback”字符串参数,而是定义了函数本身,因为在“mySetTimeout”函数中,它将第一个参数作为函数运行

因此,基本上,您可以执行以下操作:

var myCallbackFunction = function(dollars){
    onCompletion(dollars,name);
  };

var requestB = mySetTimeout(myCallbackFunction, 1000);
现在您看到第一个参数包含一个函数,当在“mySetTimeout”函数中调用该函数时,您上面定义的函数将实际运行。基本上,我试图解释,你可以在一个变量中保存一个函数。这就是匿名函数/lambda函数的用途


我试着用最简单的方式向你解释这件事。希望这有帮助。谷歌“JavaScript匿名函数”,你将有足够的东西要学。

正如我在MD中看到的,你可以将函数传递给SetTimeOut,尝试查看你的代码、pur日志。你可以在这个链接中看到函数声明和表达式之间的区别。很抱歉,回调函数就是这样工作的:)您理解正确:“我们只是将函数作为参数传递给另一个函数”。它引用函数对象并传递它。稍后,在
mySetTimeout
内部,当
callback
与括号一起使用时,它实际上被调用。这与我所问的完全不同。我问的不是参数,而是带参数和不带参数引用函数的方式之间的差异。谢谢。总之,一个函数被引用时不带括号(在其他函数中作为参数传递时),只带其名称
functionName
,无论它有多少个参数。再次感谢!我肯定会在谷歌上搜索这个您引用的不是函数..将函数赋给变量,然后将该变量作为参数传递。假设var func=function(){..}。现在,变量“func”包含一个函数。你可以传递这个变量,如果你不想的话,你可以在以后销毁它。这就是匿名函数的全部目的(不要让全局名称空间中的函数乱七八糟地运行一次,然后就忘了)
var myCallbackFunction = function(dollars){
    onCompletion(dollars,name);
  };

var requestB = mySetTimeout(myCallbackFunction, 1000);