誰能解釋什麼是怎麼回事: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