javascript - return func() 或 return func without () 形式 func(),代码会发生什么情况?

标签 javascript function return

function sum(a) {

  let currentSum = a;

  function f(b) {
    currentSum += b;
    return f;
   }

  f.toString = function() {
    return currentSum;
  };
  console.log(f);
  return f;
}

alert( sum(1)(2) ); // 3
alert( sum(5)(-1)(2) ); // 6

请帮助我理解 - return f 和 f() 之间的区别。函数会发生什么 激活时的代码返回f?它是如何工作的?为什么 console.log(f) 返回一个数字?我知道 f() 返回 结果,但返回 f? 我不明白。

最佳答案

Javascript 函数为 first class objects 。您可以像对待任何其他变量或对象一样对待函数,并将它们传递给函数,分配给其他变量,并(如本例所示)从函数返回它们。

一个可能更简单的例子来展示它可能是这样的

function foo() {
    console.log("foo called");
}

bar = foo;  // Assign the function foo to the variable bar
            // Note that this doesn't actually call foo

bar();  // Now we call the foo function

我自己的例子毫无用处,只是为了展示原理。对于更有用的示例,函数通常返回对其他函数的引用,例如问题中的示例。

关于javascript - return func() 或 return func without () 形式 func(),代码会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61658956/

相关文章:

php - Javascript 图表未插入 DIV 容器中

javascript - JavaScript 中 +a++b 是什么意思?

function - 如何在 Scala 中编写限制函数?

c++ - 返回枚举数组的函数

javascript - 为什么类和函数在 Javascript 中的行为不同?

javascript - 使用 ng-if 获取 ui-router 的当前状态

swift - 如何在 Swift 中使用 SpriteKit 从 GameViewController 中的 GameScene 调用函数?

javascript - ;(功能() {})();在 JavaScript 中

c# - 在 C# 上返回多个输出

c++ - 返回对象时,我不能简单地在类名后使用 {}