谁能解释什么是怎么回事:IE8的JavaScript作用域古怪与有名函数表达式
(function() {
this.bob = function bob() {};
window.alert(typeof(bob) + ', ' + typeof(this.bob) + ', ' + (bob == this.bob));
})();
输出 - 如果你在IE8上运行这一点 - 是:
其他浏览器会给:
function, function, true
- 正如你所期望的!
就我所能在IE8中收集不同范围的作品而言。
在其它的浏览器,bob
和this.bob
,在最后一行,是相同的参考,因为this
是窗口 - 即全球范围内 - 和bob
指全局变量。
尽管在IE8中 - 我相信 - bob
是一个本地参考,如function bob
所定义。
即使是这种情况,当然两个参考文献都是指相同的function
对象,所以bob == this.bob
仍然应该返回true?
有没有人有足够深入的IE8知识来解释这种行为?
不,IE8也创建了一个全局'bob'。其他浏览器在函数中将'this.bob'和'bob'视为相同的引用,因为它应该是。 http://kangax.github.io/nfe/ – Teemu
解释它 - 谢谢@Teemu!张贴作为答案,我会标记它是正确的 - 但我想你不需要声誉..?! :-) –
等等!有什么[错](https://jsfiddle.net/zg512xjf/)... – Teemu