我尝试使用立即调用函数表达式来运行另一个函数。 如果我使用FE,结果会出错
let f = function(x) {
alert(x)
}
(function() {
f(1)
}())
// ReferenceError: Cannot access 'f' before initialization
使用FD可以正常工作:
function f(x) {
alert(x)
}
(function() {
f(1)
}())
// 1
里面发生了什么?
答案 0 :(得分:1)
因为不能直接调用函数声明,这就是为什么将(...)
解析为单独的语句之后的原因。
您永远不要用;
结束包含 function表达式的变量声明,因此以下括号是函数调用:
let f = function() { /*...*/ }(/*...*/)(/*...*/);
TLDR:始终以分号结束语句。
let f = function() { /*...*/ }; // <<<