2014-07-02 103 views
1

我知道这可能听起来很基本,但忍受着我。我很好奇窗口对象的低层功能和意图。Javascript“窗口”:它的目的是什么?它有什么作用?

javascript窗口对象的目的是什么?它的核心功能是什么?我知道一切都存储在浏览器的窗口中。 SpiderMonkey(https://en.wikipedia.org/wiki/Mozilla#SpiderMonkey)没有默认定义的窗口,所以它必须是浏览器对象。

它的用途是什么?

+2

东西必须在路的尽头......窗口是浏览器的东西,但几乎所有的运行时都为全局对象提供了一个类似的别名。 – dandavis

+2

有人应该为这个问题做一个好的2班轮。 – frenchie

+1

为什么浏览器工具(open(),prompt()等)无法从window.browser移出,或者导航器等现有名称是历史问题。考虑到早期网络的匆忙,很可能原本没有一个完美的设计和计划。 – dandavis

回答

2

窗口是在任何浏览器的应用程序在全球范围内。您的代码从窗口运行。当您在浏览器中打开JavaScript控制台并开始编码时,您正在从窗口范围开始工作。这就是说,这只是被称为封闭范围的冰山一角。你调用的每个函数都有它自己的闭包(闭包对于函数代码运行的环境来说只是一个奇特的词)。从窗口调用的两个函数将无法访问其他每个闭包,但是它们将有权访问其父范围,在这种情况下,该窗口。例如:

var x = 'hello' // saves 'hello' as variable x in window/ global scope 
var greeting = function(){ 
    console.log(x); 
    var y = ' world'; // stores ' world' as y in greeting closure scope 
} 

var toGreet = function(){ 
    console.log(y); 
} 

greeting(); // logs 'Hello', stores ' world' as variable y in greeting closure scope 
toGreet(); // Errors, because y is undefined. toGreet does not have access to greetings closure scope 

如果有要跨范围共享变量或常数(或任何值,对于这个问题),可以在window--定义变量,那么您可以从访问这些值任何功能。喜欢这个!

变种X =“你好” 变种Y =“世界”

var greeting = function(){ 
    console.log(x); 
} 

var toGreet = function(){ 
    console.log(y); 
} 

greeting(); // logs 'Hello' 
toGreet(); // logs ' world' 

不幸的是,范围概念已经比这更深,但是这应该给你的窗口是什么好主意。 ..只是旁白:通常最好不要将变量保存在窗口中,因为您可能会意外地在一个函数中改变它们,但在另一个函数中需要它们。在函数之间共享变量的最佳方式是将其作为参数传递给函数。

如果您想了解更多关于范围和关闭的信息,请查看this blog

+0

我了解范围是什么。所以基本上,这只是浏览器工作的范围? – cxdf

+0

哦,真棒。是的,你可以这样看待它。窗口只是整个程序运行的总体范围。 – Mercury

+0

正是我在找的东西。 – cxdf

0

当您为网页进行客户端编程时,window对象是一个特殊的对象,它也恰好是JavaScript执行的全局范围。

  • 需要访问HTML DOM?使用window.document
  • 需要了解当前的URL还是想来回导航?使用window.locationwindow.history
  • 需要了解有关正在使用的网络浏览器的信息?使用window.navigator
  • 等...

同样,还有的属性,方法,事件多如牛毛,而对象则可以通过window对象访问。下面是一些参考:

+0

你可以使用Object.getOwnPropertyNames(window)查看给定浏览器的全部内容;即使在about:blank左边,窗口在Chrome和Firefox中定义了500多个属性,在IE 10中定义了300多个属性。其中几十个实际上对于制作应用程序非常有用。 – dandavis

+0

'“有必要访问你正在尝试使用JavaScript编程的页面,窗口对象就是那个”'。并非如此,“页面”由* document * object(* cf * DOM)表示,与* window *完全不同。 – RobG

+0

@RobG:注意谢谢。我写了答案对新手JavaScript程序员有帮助。我已经更新了答案。 – Krumia

相关问题