// 浏览器的 ES6 环境functionf() { console.log('I am outside!'); }
(function() {if (false) {
// 重复声明一次函数ffunctionf() { console.log('I am inside!'); }
}
f();
}());
// Uncaught TypeError: f is not a function
上面的代码在符合 ES6 的浏览器中,都会报错,因为实际运行的是下面的代码。
// 浏览器的 ES6 环境functionf() { console.log('I am outside!'); }
(function() {var f = undefined;
if (false) {
functionf() { console.log('I am inside!'); }
}
f();
}());
// Uncaught TypeError: f is not a function
考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。
//函数声明语句
{
let a = 'hello';
functionf() {return a;
}
//f(); //hello
}
//f(); //hello
建议:若需要,应写成函数表达式,而不是函数声明语句。如下
// 函数表达式
{
let a = 'hello';
let f = function() {return a;
};
} //