使用以下代码,它既不是ES6,也不在“严格模式”中,我原本预期的结果应该是'b',因为
当这段代码被额外的花括号包围时,结果会是预期的 'b'。
请参考下面的附加示例以获得进一步说明:
foo
的第二个声明应该覆盖第一个声明。但结果却是'a'!{
function foo() {
console.log('a');
}
}
function foo() {
console.log('b');
}
foo(); // 'a' ? Why not 'b'?
当这段代码被额外的花括号包围时,结果会是预期的 'b'。
{ // additional curly braces
{
function foo() {
console.log('a');
}
}
function foo() {
console.log('b');
}
foo(); // 'b' as expected!
} // end additional curly braces
请参考下面的附加示例以获得进一步说明:
foo('before declaration'); // outcome: from outside block :before declaration
{
function foo(s) {
console.log('from inside block: ' + s);
}
}
function foo(s) {
console.log('from outside block :' + s);
}
foo('after declaration'); // outcome: from inside block: after declaration
在我看来,正确的结果应该是:
// from outside block :before declaration
// from outside block :after declaration
我无法找到我的误解所在。
如果我再次将完整的最后一个例子放在花括号中,就像这样:
{
foo('before declaration'); // outcome: from outside block :before declaration
{
function foo(s) {
console.log('from inside block: ' + s);
}
}
function foo(s) {
console.log('from outside block :' + s);
}
foo('after declaration'); // outcome: from outside block: after declaration
}
我得到了预期的结果。
"use strict"
,请注意差异。 - Jaromanda X