用名称创建函数并用括号将其包装或将其作为参数/回调传递给另一个函数。当您尝试以其名称。
示例:
(function name1(){});
console.log(name1); // throws error: name1 is not defined
示例:
plugin.module(function name2(){});
name2(); // throws error: name2 is not defined
function
关键字做两个相似但截然不同的事情:
- 它引入了函数声明语句;
- 它引入了函数表达式。
这两种内容都创建了一个函数,但是前者(函数声明)也将函数名称(在这种情况下需要)绑定到本地范围中。但是,函数表达式但是,不是将函数名称绑定到本地范围中。该名称仅在创建函数的范围(即,内部函数)中绑定。
当function
是语句中的第一个令牌时,这是函数声明。否则,这是函数表达式。因此,当您在function
语句周围使用括号时,它不再是语句。这是一个表达式。
解决方案的一些方法:
function name1(){ //declaration instead of expression
//...
}
name1();
或有点丑:
let name1;
(name1 = function(){/*...*/})();
name1();