Javascript“窗口”:它的目的是什么?它有什么作用?

时间:2014-07-02 22:56:40

标签: javascript browser

我知道这可能听起来很基本,但请耐心等待。我很好奇窗口对象的低级功能和意图。

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

它的目的是什么?

2 个答案:

答案 0 :(得分:1)

Window是任何浏览器应用程序中的全局范围。您的代码从窗口运行。当您在浏览器中打开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

如果您想要跨范围共享变量或常量(或任何值),您可以在窗口中定义该变量 - 然后您可以从任何函数访问这些值。喜欢这个!

var x ='你好' var y =' world'

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

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

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

不幸的是,范围的概念比这更深刻,但是这应该让你对窗口的内容有一个很好的了解......而且只是旁白:通常,最好不要保留变量在窗口中,因为你可能会在一个函数中意外地改变它们,但在另一个函数中需要它们。跨函数共享变量的最佳方法是将其作为参数传递给函数。

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

答案 1 :(得分:0)

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

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

同样,您可以通过window对象访问过多的属性,方法,事件和对象。以下是一些参考文献:

相关问题