JavaScript "window": What is its purpose? 它有什么作用?

标签 javascript browser

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

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

它的目的是什么?

最佳答案

Window 是任何浏览器应用程序中的全局范围。您的代码是从窗口运行的。当您在浏览器中打开 JavaScript 控制台并开始编码时,您正在窗口范围内工作。话虽如此,这只是闭包范围的冰山一 Angular 。您调用的每个函数都有自己的闭包(闭包只是函数代码运行环境的一个花哨词)。从窗口调用的两个函数将无法访问彼此的闭包,但是它们可以访问其父作用域,在本例中为窗口。示例:

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 = '世界'

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

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

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

不幸的是,范围的概念比这更深入,但这应该让您很好地了解窗口是什么......顺便说一句:通常不要将变量保留在窗口中符合您的最佳利益,因为您可能会不小心在一个函数中更改它们,但在另一个函数中需要它们。跨函数共享变量的最佳方法是将其作为参数传递给函数。

如果您想了解有关作用域和闭包的更多信息,请查看 this blog !

关于JavaScript "window": What is its purpose? 它有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542385/

相关文章:

Javascript Web 应用程序无法在 IE 中运行

javascript - Node.js 上的 While 循环具有异步数据

javascript - 加载 javascript 文件的最理想方式是什么?

internet-explorer - IE Collection 是用于测试各种版本的 Internet Explorer 的可靠工具吗?

browser - Google Maps api v3 - 隐藏在默认平板电脑 Android 浏览器中的控件

c# - 如何使用 C# 在 Windows 8 中设置默认浏览器?

javascript - 流行的智能手机浏览器默认启用 JavaScript 吗?

javascript - 追踪 React.js 中的错误原因

javascript - const Component = () => (<div></div>) 与 React 中的 const Component = () => {return(<div></div>)} 相同吗?

javascript - 为什么 IE 的 console.log() 实现方式与 Safari、Chrome 和 Firefox 不同