我不是一個全職的JS開發者,儘管我覺得我已經與它一起工作了。關於閉包的大部分討論都是合理的。我很好奇,如果全球window
對象只是一個全局封閉?我已閱讀http://lostechies.com/derickbailey/2011/11/30/is-javascripts-global-scope-really-just-a-closure/,但似乎並未以「是」或「否」的方式回答問題。瀏覽器中的窗口對象是閉包還是其他構造?
回答
這是一個對象,所以它不能是一個閉包(閉包是函數,加上一個作用域鏈)。這也是全局範圍對象,因爲所有全局變量都是屬性window
。
你提到的文章中說:
它看起來像全球範圍與運行的最外面的範圍無非是關閉支持的JavaScript已經內置到它的副產品多,組合(一個DOM窗口或CommonJS實現的其他範圍)。
筆者並不是說window
是關閉,它只是說,一切都進入了被困在封閉同樣的原因變量在全球範圍內都在內部範圍可見。那是真實的。
這包括向window
對象本身,如火箭的Hazmat指出的引用。還有不止一個,有window
,self
,top
......所以window.window.top.window.self === window
。實際上,全局可訪問window
的原因是因爲全局對象中存在對它的引用(=== itself
)。另請參閱:my answer至Why top level functions are created as methods of window in JavaScript?及其下方的註釋。
它也是DOM的根對象。 –
「所有全局變量都是'window'的屬性,比如'window'。所以,你可以訪問:'window.window' :-P –
@RocketHazmat是的,這很有趣,值得一提。添加了關於它的一個筆記。 – bfavaretto
這是一個對象。您可以添加屬性並從中調用屬性。您使用的許多標準功能實際上都是window
對象的一部分,但可以省略。如果您在腳本中創建一個新窗口,它將擁有自己的window
對象,您可以引用和操作。
閉包爲變量創建一個範圍,就像一個窗口創建範圍一樣。但是,閉包是一個函數,因此window
對象不是閉包。
- 1. 從其他窗口關閉所有子窗口瀏覽器
- 2. JavaScript對象構造函數的問題,其中的參數是其他對象
- 3. 關閉瀏覽器的主窗口
- 4. 關閉Vaadin的瀏覽器窗口
- 5. 在Emacs拆分窗口中,如何瀏覽其他窗口?
- 6. 有沒有辦法檢測瀏覽器窗口是否關閉?
- 7. 是否可以通過JavaScript關閉瀏覽器窗口?
- 8. 如何檢測瀏覽器(不是窗口)關閉事件
- 9. 是否可以使用JavaScript關閉瀏覽器窗口?
- 10. 圖庫圖片包裹在IE瀏覽器而不是在其他瀏覽器
- 11. 當瀏覽器窗口關閉
- 12. driver.quit()不關閉瀏覽器窗口
- 13. 關閉瀏覽器窗口javascript for blackberry
- 14. 自動關閉瀏覽器窗口
- 15. geb spock並關閉瀏覽器窗口
- 16. Silverlight - 關閉瀏覽器窗口
- 17. 檢查瀏覽器窗口關閉
- 18. 如何關閉瀏覽器窗口?
- 19. 卸載時關閉瀏覽器窗口
- 20. Dart:如何關閉瀏覽器窗口?
- 21. 關閉所有瀏覽器窗口?
- 22. 如何關閉瀏覽器窗口
- 23. 跨瀏覽器窗口關閉事件
- 24. Selenium關閉瀏覽器彈出窗口
- 25. 使用asp.net關閉瀏覽器窗口
- 26. Flash AS3關閉瀏覽器窗口
- 27. Xcode窗口可以是「文檔」窗口而不是「瀏覽器」窗口嗎?
- 28. QTP中瀏覽器對象的完整結構是什麼?
- 29. 使用彈出窗口 - 尤其是IE瀏覽器
- 30. 是否可以隱藏python瀏覽器窗口(包括Windows,Linux)?
這是一個對象。 –