如何解释IE下不可达if语句中函数声明变量提升对history造成的影响?
如何解释IE下不可达if语句中函数声明变量提升对history造成的影响?
为什么无论如何都只有history被覆盖?history有什么特殊之处吗?
ES6之前 block 中的函数声明是「未定义行为」。
代码
if (false) {
function f() {}
}在IE中相当于
if (false) {
var f = function f() {}
}其中var f被提升。
f的结果取决于是否已经有f绑定。如果已经有,则无效果;如果没有,则产生了f,其值为undefined。
题主的测试中,console就是前者的情形,history则是后者的情形。
那么为什么会有这差别?
因为console是window上的属性, 相当于全局变量。而history则不是,它是Window.prototype上的getter。
作者:贺师俊 链接:https://www.zhihu.com/question/411145239/answer/1377346941 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
最后更新于
这有帮助吗?

