创建带有名称的函数并用括号括起来或将其作为参数/回调传递给另一个函数时。当您尝试稍后通过其名称引用该函数时会引发错误。。
示例:
(function name1(){});
console.log(name1); // throws error: name1 is not defined
示例:
plugin.module(function name2(){});
name2(); // throws error: name2 is not defined
答案 0 :(得分:1)
function
关键字执行两个相似但截然不同的事情:
这两件事都创建了一个函数,但前者(函数声明)也将函数名称(在这种情况下需要)绑定到本地作用域。但是,函数表达式 不将函数名绑定到本地作用域。该名称仅在创建函数的范围内绑定(即在函数内)。
当function
是语句中的第一个标记时,它是一个函数声明。否则,它是一个函数表达式。因此,当您在function
语句周围使用括号时,它不再是一个语句;它是一种表达方式。
答案 1 :(得分:1)
要解决的一些方法:
function name1(){ //declaration instead of expression
//...
}
name1();
或者有点丑陋:
let name1;
(name1 = function(){/*...*/})();
name1();