Javascript - 无法理解函数括号

时间:2017-07-06 06:34:42

标签: javascript

我很困惑如何调用函数的方式。有时它们以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函数中,我们传递带有参数的回调函数。

任何人都可以向我解释所有案件吗?谢谢!

2 个答案:

答案 0 :(得分:1)

你需要了解一些关于回调函数,匿名函数等的东西才能得到这个想法。在JS中使用匿名函数非常常见。

我会尽力以最简单的方式向您解释。在您的代码中,在第一行:请参阅我的评论。

var mySetTimeout = function(callback, delay){ // Note 01
  var dollars = 100;
  callback(dollars); // Note 02
};

注意01:这里,回调只不过是一个字符串参数。它不是一个函数,而是一个函数名。你告诉你要运行一个名为" callback"的函数。你传递那个名字然后通过简单地调用callback()来运行该功能,其中"回调"是您在上面传递给此函数的参数。

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

在这行代码中,

  var requestB = mySetTimeout(function(dollars){
    onCompletion(dollars,name);
  }, 1000);

你可以看到而不是"回调" string参数,你已经定义了函数本身,因为在" mySetTimeout"函数,它将第一个参数作为函数运行。

基本上,你可以做同样的事情:

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

var requestB = mySetTimeout(myCallbackFunction, 1000);

现在你看到第一个参数包含一个函数,以及何时在" mySetTimeout"中调用它。函数,您实际运行上面定义的函数。基本上,我试图解释你可以在变量中保存一个函数。这就是匿名函数/ lambda函数的目的。

我试图用最简单的方式解释你。希望这可以帮助。 Google" JavaScript匿名函数"你将有足够的东西要学习。

答案 1 :(得分:-2)

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

语法:

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

var timeoutID = window.setTimeout(code, delay);

希望这会有所帮助:)