JavaScript全局對象和窗口對象之間有什麼區別?我知道在這兩種情況下,你不必聲明對象使用這些方法。全局和窗口對象的區別
0
A
回答
0
1
window
對象封裝了全局範圍。當聲明一個變量時,省略var
(或let
)將隱式地將其作爲屬性添加到全局範圍。它在這個意義上是獨一無二的,因爲在不同範圍內不存在與window
等價的等價物。
我要quote myself在這一個:
MDN's description of
var
指出,在全球範圍內被綁定到全局對象。這表明聲明一個變量(或者在頂層使用var,或者在函數內部沒有使用var)只需向window
(或者瀏覽器外部的一個等價物)添加一個新的屬性即可。
試一試。創建一個變量而不使用var
,然後查看控制檯中的window
對象。你會在那裏看到它。它是這樣做的相當於:
Object.defineProperty(window, 'foo', {
value: "bar",
enumerable: true // see @dandavis' comment on iterating over implicit global vars
)}
這並不能解釋爲什麼是這種情況。只有window
是獨一無二的,因爲所有內容都在其中定義。
0
在瀏覽器中運行的JavaScript中,窗口位於作用域鏈的頂部。如果你定義了一個「全局」變量,則暗示它在窗口對象下。
例如:
// Global variable
var g = 0;
function foo(){
window.g = 1
// This will output '1'
alert(g);
}
+0
深思熟慮:如果「窗口位於範圍鏈的頂部」,爲什麼它繼承自Object.prototype和Window.prototype? – dandavis
相關問題
- 1. 全局對象和頭部全局對象有什麼區別?
- 2. 窗口對象的全局變量和屬性之間有什麼區別?
- 3. JavaScript全局對象vs窗口對象
- 4. 窗口屬性和全局變量的區別
- 5. Browserify窗口對象不具有全局
- 6. 設置屬性到全局對象和窗口對象之間有什麼區別?
- 7. 對象是窗口(全局)的屬性,窗口是對象的實例?
- 8. 使用出口和全局對象
- 9. JavaScript全局對象和全局範圍
- 10. 將變量添加到IE中的全局窗口對象中
- 11. 模擬全局窗口對象中的require.js
- 12. 爲什麼全局的「窗口」對象有多級訪問
- 13. 迭代的「窗口」全局
- 14. SDL2中的全局窗口
- 15. 屏幕和窗口屬性的區別?
- 16. 窗口和ViewController之間的區別
- 17. PHP中是否有一些全局對象(如JavaScript中的窗口對象)?
- 18. 流星應用程序:如何訪問全局窗口對象
- 19. 命名閉包是否污染全局/窗口對象?
- 20. Webpack更改窗口全局對象範圍
- 21. 陣列和全局對象
- 22. GlassFish JDO和全局對象
- 23. ReferenceError和全局對象
- 24. TCP - 擁塞窗口和接收窗口之間的區別
- 25. 試圖瞭解js中的窗口和文檔對象之間的區別
- 26. OpenCL中本地和全局內存區別有什麼區別?
- 27. 區別對象和功能
- 28. jQuery對象和窗口對象
- 29. 接口和抽象方法的區別
- 30. 子窗口和後代窗口之間有什麼區別?
你必須聲明它們使用它們,這只是他們自動爲您和Window.prototype宣稱,像所有的原型,使修改立即提供給所有實例。 – dandavis
你在談論瀏覽器JS嗎?你可以在服務器上運行JS。那裏沒有'窗口'。我想,瀏覽器沒有'global'。 – Rudie
有幾個「Globals」;非嚴格的this,window,self,top,implicit publishing(非var聲明),({})。constructor.prototype,Window.prototype,Object.prototype等。其中之一的任何添加都會顯示爲詞法所有範圍內的名稱。 「嚴格使用」大大減少,但並沒有消除這種瘋狂。 – dandavis