2

我按照教程遇到了以下代码。

const increment = (function(){
    return function incrementbytwo (number){
        return number+2;
    }
})();

console.log(increment(1));

以上输出3。

我的问题是

  1. 内部如何incrementbytwo从外部接收参数,因为它是 a Self-Executing Anonymous Functions
  2. 逐步解释这是如何执行的。
  3. 使用这样的功能的真实场景是什么?
4

2 回答 2

1

以下是我对此的理解:

我将从您列表中的#2 开始,因为它会使这更容易。你所拥有的是一个自动执行的匿名函数,它返回一个存储的函数。

  1. 您调用将increment常量分配给匿名函数执行的返回结果。
  2. 当 Anon 函数被执行时,它返回该函数incrementbytwo并将 THIS 分配给您的increment常量
  3. 然后调用在increment常量中执行存储的函数,现在是 incrementbytwo(number)

您上面的代码只是一个标准函数声明,在声明时有额外的步骤。

const increment = function increment(number){
        return number+2;
    }

console.log(increment(1));

据我所知,这个确切的代码场景没有生产用途(如果我错了,请在评论中烤我)

于 2019-08-15T23:09:01.363 回答
1

1) 自执行 IFFE 导致创建分配给increment标识符的函数语句。它与以下内容完全相同:

const increment = function incrementbytwo (number){
    return number+2;
}

如果您不知道,我应该补充一点,即increment块作用域为封闭代码块(const),而incrementbytwo函数作用域为函数,并且在函数本身之外不可访问(由于函数表达式的性质) .

2)

  • 1) 评估右侧 - 并返回一个函数语句,声明incrementbytwo(number)期望一个数字作为参数
  • 2) 对该函数语句进行赋值increment(因此是一个函数表达式。函数表达式使用与函数语句相同的签名 - 因此采用它传递给函数的单个参数。
  • 3) 调用 increment(1) 让奇迹发生。

3)没有一个。

于 2019-08-15T23:09:42.043 回答