为什么以下代码在 Chrome 和 Firefox 之间输出不同的结果?
f = function() {return true;};
g = function() {return false;};
(function() {
if (g() && [] == ![]) {
f = function f() {return false;};
function g() {return true;}
}
})();
console.log(f());
在 Chrome 中:结果是false. 但是,在 Firefox 中,它是true.
上面代码的关键行是第4行,根据我对函数名提升的了解,该函数g应该在第6行,即第2行被第6行覆盖。IMO,Chrome的行为是正确的。
我是对的吗?如果是这样,为什么 Firefox 会输出不同的结果?