2012-09-01 70 views
0

我有2個嵌套的with語句,每個語句都有一個createElemet函數,它在除IE9以外的每個瀏覽器中都正確運行,在IE9中它甚至不會給出錯誤,那有什麼問題?IE9 javascript嵌套`createElement`失敗

代碼:

with(block = document.createElement('div')){ 
    with (detaildiv = document.createElement('div')) 
    { 
     alert('test'); 
    } 
} 
+6

順便說一句,你不應該使用'with'。最好寫下所有的名字,特別是這五行。 – ComFreek

+0

@ComFreek它只是我包含在我的項目中的一個精簡版代碼的簡化版本。 – sepehr

+2

來自道格拉斯克羅克福德的[博客文章](http://www.yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/)關於不應該使用「with」的原因: – some

回答

1

正如我在comment已經提到,我發現了一個很簡單的解決方案:
使用window.document.***,而不是在內部with小號直接使用document.***的:

with(block = document.createElement('div')) { 
    with (detaildiv = window.document.createElement('div')) { 
     alert('test'); 
    } 
} 

你也應該考慮重構你的代碼,用其他結構替換with語句。

2

從技術上說這個問題是在IE中的錯誤。

實際上,問題在於您編寫的代碼不正確,因爲您可以創建嵌套的本地作用域,而不是因爲您需要它 - 因此對可維護性和性能產生了重大影響。

+0

我搜索了很多,但無法找到這個bug,你有這方面的參考? – sepehr