首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript,窗口上下文

Javascript,窗口上下文
EN

Stack Overflow用户
提问于 2014-02-16 16:15:16
回答 3查看 5.2K关注 0票数 0

我试图理解窗口对象是如何包装我将要解释的代码的,例如,我得到了这样的理论:

代码语言:javascript
复制
function window(){
  // The window.window is in circular structure because window property on 
  // the window object  is set to this (this.window = this)


 // All the rest of the developer code goes here
}

window.call({});

这可能是个糟糕的理论,但我想尝试一下,我的问题是窗口对象是如何包装我的代码的,,如果我对window.window循环结构是正确的话?

编辑:

我想了解的是,窗口对象作为我的全局范围是如何可用的,它是如何包装我的代码的,它是否与我的示例相同或类似?窗口对象是如何构造在场景后面的?

编辑:

谢谢你的回答,请告诉我我对不对,

internalEval函数是用java或c++编写的javascript引擎函数,等等。

另外,当您说脚本块时,您指的是<script></script>之间的所有代码

当您说“加载到视图中的外部脚本文件”时,意味着在html页面中创建的任何其他<script></script>标记内容都将根据窗口范围(全局范围)进行评估。

关于窗口对象:浏览器在任何脚本之前执行的第一行是var window = {};,它将代表我的全局范围,下一步是通过赋值window.__proto__ = Window;来构建空的窗口对象,现在我相信窗口(function (){本机代码})在该行之前被分配给全局( window )对象:window.__proto__ = Window;

代码语言:javascript
复制
var window = {};
window.Window = function Window() { [native code] }
window.__proto__ = Window;

我真的认为我明白了,但是如果我错了,请纠正我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-16 17:46:12

假设您的网页上有一些脚本块:

代码语言:javascript
复制
<script>
  var loc = window.location;  
  ... 
</script>

以下是浏览器在需要运行该块中的脚本时所做的工作:

  1. 创建窗口命名空间对象: var window = {}; window.window = window;
  2. 将其原型设置为窗口“类” window.__proto__ = Window;
  3. 将窗口上下文中的代码作为全局命名空间对象: internalEval("content of that script block", window);
  4. 对加载到视图中的每个脚本块和外部脚本文件执行#3。

因此,如果您的脚本中有这样的语句:

代码语言:javascript
复制
someGlobalVar = 1234;

该someGlobalVar将作为窗口对象的属性创建:

代码语言:javascript
复制
window.someGlobalVar; // -> 1234 value here

而且您不能创建名为window的全局函数,因为该变量已经定义并配置为只读。所以上面的window.window = window;语句实际上如下所示:

代码语言:javascript
复制
Object.defineProperty(window, "window", {
  enumerable: false,
  configurable: false,
  writable: false,
  value: window
});
票数 3
EN

Stack Overflow用户

发布于 2014-02-16 17:41:03

根据规格的说法,需要有一些全局对象来完成某些角色。它提供了全球环境,这是最外层的范围。全局对象是由JavaScript引擎本身创建的,在任何JavaScript代码实际运行之前;您无法真正表达在JavaScript代码本身中是如何工作的。

对于在具有DOM的上下文中执行的浏览器,window恰好是该全局对象。每个JavaScript运行时都有一个;但是它是什么取决于它在哪里运行。例如,在Node中,global对象(多好的名字啊?)扮演那个角色。

票数 2
EN

Stack Overflow用户

发布于 2014-02-16 17:14:45

“窗口”是在任何执行上下文之前创建的,不能用作全局范围内变量或例程的名称。这里有一个很好的参考@poke链接:http://www.ecma-international.org/ecma-262/5.1/#sec-15.1

窗口对象用于检索有关窗口的信息,页面上的每一个帧都将有一个窗口对象。

下面是一些更多的信息,http://msdn.microsoft.com/en-us/library/ie/ms535873(v=vs.85).aspx

注意: MSDN文章和EMCAScript中存在一些不一致之处。@Poke在评论中指出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21813806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档