function f () {
console.log('outside');
}
// IIFE
( function () {
if( false ) {
function f () {
console.log('inside');
}
}
f();
})()
全局声明了一个f函数, 在立即执行函数中的判断块中, 也声明了一个f函数.
在ES5中, 函数具有提升的特性, 那么就会输出inside.
但是, 在ES6中, 他会将函数声明视为变量声明, 即:
function f () {
console.log('outside');
}
// IIFE
( function () {
let f; // ES6将以下的f函数视为变量进行了提升.
if( false ) {
function f () {
console.log('inside');
}
}
f(); // 在ES6中, 会报错, f is not function.
})()
块级作用域 和 函数声明
全局声明了一个
f
函数, 在立即执行函数中的判断块中, 也声明了一个f
函数.在ES5中, 函数具有提升的特性, 那么就会输出
inside
.但是, 在ES6中, 他会将函数声明视为变量声明, 即:
所以, 我们不建议在块级作用域中声明函数