对于以下代码,既不是 ES6,也不是“严格模式”,我预期结果为 'b',因为 的第二个声明foo应该覆盖第一个声明。但结果是“a”!
{
function foo() {
console.log('a');
}
}
function foo() {
console.log('b');
}
foo(); // 'a' ? Why not 'b'?
Run Code Online (Sandbox Code Playgroud)
当此代码被附加花括号括起来时,结果是预期的“b”。
{ // additional curly braces
{
function foo() {
console.log('a');
}
}
function foo() {
console.log('b');
}
foo(); // 'b' as expected!
} // end additional curly braces
Run Code Online (Sandbox Code Playgroud)
为了进一步说明,请考虑以下附加示例:
foo('before declaration'); // outcome: from outside block :before declaration
{
function foo(s) {
console.log('from inside block: ' + s);
}
}
function foo(s) {
console.log('from …Run Code Online (Sandbox Code Playgroud) javascript ×1