IIFE 运行 函数声明和函数表达式结果不同
IIFE run Function Declaration and Function Expression with different result
我尝试将立即调用的函数表达式用于 运行 另一个函数。
如果我使用 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
里面发生了什么?
因为函数声明不能直接调用,所以(...)
被解析为单独的语句。
您永远不会以 ;
结束包含 函数表达式 的变量声明,因此以下括号是函数调用:
let f = function() { /*...*/ }(/*...*/)(/*...*/);
TLDR:始终以分号结束语句。
let f = function() { /*...*/ }; // <<<
我尝试将立即调用的函数表达式用于 运行 另一个函数。 如果我使用 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
里面发生了什么?
因为函数声明不能直接调用,所以(...)
被解析为单独的语句。
您永远不会以 ;
结束包含 函数表达式 的变量声明,因此以下括号是函数调用:
let f = function() { /*...*/ }(/*...*/)(/*...*/);
TLDR:始终以分号结束语句。
let f = function() { /*...*/ }; // <<<