宿主環境提供的全域物件/函數
如window,alert,setTimeout,document,location等,多數瀏覽器都會限制其重寫
window = 55; alert(window);
該句在IE下會出錯提示非法複製,後面的彈出框沒有執行。其它瀏覽器則當window=55不存在,仍然彈出了window。
再重寫alert
alert = 55; console.log(alert);
IE下提示報錯,Firefox/Chrome/Safari/Opera竟然被重寫了,從對應的控制台可以看到輸出了55。可以看出對於宿主環境提供的全域物件/函數,有的瀏覽器不支援重寫,有的則可以重寫 。
以下是兩種方式宣告全域變數
a1 = 11; var a2 = 22; for(a in window){ if(a=='a1'||a=='a2'){ alert(a) } }
上述程式碼不會在IE中彈出訊息框,在IE中內部大概如下
//IE with(host_object){//window with(global_object){//Global a1 = 11; var a2 = 22; } }
即a1,a2是作為上面說的第一種,JS引擎提供的Global物件上的屬性,而非第二種宿主環境提供的window物件上的屬性。因此IE中for in window時a1,a2都不存在。如果IE中提供對象Global物件的引用,沒準下面的程式碼可以彈出資訊框。
for(a in Global){ if(a=='a1'||a=='a2'){ alert(a) } }
Firefox/Safari/Chrome/Opera中內部大概是下面的樣子
//Firefox/Safari/Chrome/Opera with(host_object){//window a1 = 11; var a2 = 22; with(global_object){//Global } }
即a1,a2是作為上面說的第二種,宿主環境提供的全局物件window上的屬性。因此for in window時a1,a2都存在,彈出了訊息框。
再看第三者方式宣告全域變數window.a3 = 33,這樣是顯示的把a3掛在window上作為window的屬性,因此在所有瀏覽器中for in window時都能取得到a3。
以上是各種瀏覽器環境提供的JavaScript全域物件/函數實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!