Javascript 范围外的自动执行匿名函数参数

Javascript 范围外的自动执行匿名函数参数,javascript,function,dom-events,anonymous-function,self-invoking-function,Javascript,Function,Dom Events,Anonymous Function,Self Invoking Function,通过遵循教程,我遇到了以下代码 const increment = (function(){ return function incrementbytwo (number){ return number+2; } })(); console.log(increment(1)); 上述产出为3 我的问题是 内部递增2是一个自动执行的匿名函数,它如何从外部接收参数 逐步解释如何执行此操作 使用这样的函数的真实场景是什么 以下是我对这一点的理解: 我将从清单上的#2

通过遵循教程,我遇到了以下代码

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

console.log(increment(1));
上述产出为3

我的问题是

  • 内部
    递增2
    是一个
    自动执行的匿名函数,它如何从外部接收参数
  • 逐步解释如何执行此操作
  • 使用这样的函数的真实场景是什么

  • 以下是我对这一点的理解:

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

  • 调用将
    增量
    常量分配给匿名函数执行的返回结果
  • 当Anon函数被执行时,它返回函数
    incrementbytwo
    ,并将其分配给
    increment
    常量
  • 然后调用执行
    increment
    常量中存储的函数,该常量现在递增2(数字)
  • 上面的代码只是一个标准的函数声明,声明时有额外的步骤

    const increment = function increment(number){
            return number+2;
        }
    
    console.log(increment(1));
    
    据我所知,这个确切的代码场景在生产中没有任何用途(如果我错了,请在注释中烤我)

    1)自执行IFFE会导致创建一个分配给
    增量
    标识符的函数语句。这与:

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

    如果您不知道,
    increment
    是块作用域到封闭代码块(const),而
    incrementbytwo
    是函数作用域到函数,在函数本身之外是不可访问的(由于函数表达式的性质)

    (二)

    • 1) 对右侧进行求值,并返回一个函数语句,该语句声明
      incrementbytwo(number)
      ,该语句需要一个数字作为参数
    • 2) 将该函数语句赋值给
      increment
      (因此是一个函数表达式。函数表达式使用与函数语句相同的签名-因此接受一个传入函数的参数
    • 3) 调用increment(1)可以实现奇迹

    3) 没有一个。

    incrementbytwo
    不是一个自动执行的函数,也绝对不是匿名函数。它被包装在一个毫无意义的立即执行函数表达式(IIFE)中,可以简化为
    const increment=function incrementbytwo(numer){…}