用括号包裹时,不能用其名称引用函数



用名称创建函数并用括号将其包装或将其作为参数/回调传递给另一个函数。当您尝试以其名称。

示例:

(function name1(){});
console.log(name1); // throws error: name1 is not defined

示例:

plugin.module(function name2(){});
name2(); // throws error: name2 is not defined

function关键字做两个相似但截然不同的事情:

  1. 它引入了函数声明语句;
  2. 它引入了函数表达式

这两种内容都创建了一个函数,但是前者(函数声明)也将函数名称(在这种情况下需要)绑定到本地范围中。但是,函数表达式但是,不是将函数名称绑定到本地范围中。该名称仅在创建函数的范围(即,内部函数)中绑定。

function是语句中的第一个令牌时,这是函数声明。否则,这是函数表达式。因此,当您在function语句周围使用括号时,它不再是语句。这是一个表达式。

解决方案的一些方法:

function name1(){ //declaration instead of expression
 //...
}
name1();

或有点丑:

let name1;
(name1 = function(){/*...*/})();
name1();

最新更新