【问题标题】:What is the extra set of parentheses for额外的括号是什么
【发布时间】:2015-06-02 11:57:15
【问题描述】:

我一直在学习 JavaScript 和 AngularJS,并且看到了带有一组额外括号的函数。这是什么?它是如何工作的? 例如:myFunc(args)(moreArgs).

【问题讨论】:

  • 很难用这样的代码来判断,但可能是 myFunc(args) 返回一个函数。
  • 你能举个例子吗?
  • @Dmitry 不确定示例。我认为我提供的是示例。我刚刚遇到它,不确定它是如何工作的。
  • 关闭选民:这个问题不清楚怎么办?这些只是解析 ECMAScript 语法下提供的语句的一种方法,即使它在语法上存在歧义,标识符名称(myFuncargs)也可以非常清楚地说明语句旨在阅读。正如已经发布的两个正确答案所证明的那样,这个问题是完全可以理解和回答的。

标签: javascript nested-function


【解决方案1】:

额外的集合用于运行和返回另一个函数。因此,使用您的示例:myFunc 将接受一个参数并返回第二个函数(可以匿名命名):

function myFunc(args) {
  return function (moreArgs) {
    return args + ' ' + moreArgs;
  };
}

var myMsg = myFunc("This")("works!");
alert(myMsg);

【讨论】:

  • 谢谢你,既然看到了实际的功能。这是否意味着您可以返回多个函数?
  • 老实说,我知道您可以返回比我上面演示的更多的功能,但我不确定限制是多少(如果有的话)。我希望您可以根据需要返回任意数量,但我不确定这是否实用。
  • @myPClovesME 函数一次只能返回一个值。不过,您可以嵌套返回的函数。在这里,我们有一个函数,它返回一个返回字符串的函数。相反,我们可以有一个返回函数的函数,该函数返回一个返回字符串的函数。 (或者一个函数返回一个函数返回一个函数返回一个函数返回......)
  • @myPClovesME 还考虑使用返回自身的函数返回无限函数的可能性:function foo(done) { if(done) { return "all done"; } else { return foo; } } 您可以使用foo(false)(false)(false)(false)(false)(true); 调用它。
  • @apsillers 这真是太棒了。谢谢大家的帮助!
【解决方案2】:

在 javascript 中,函数可以返回一个函数,并且可以立即调用返回的函数。例如:

function a () {
    return function () {
        console.log('hello');
    }
}

调用返回函数的一种方式是:

var b = a(); // b is now a function returned by a
b(); // logs "hello"

但是在javascript中你也可以这样做:

a()(); // calls the returned function immediately, logs "hello"

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多