我试图理解窗口对象是如何包装我将要解释的代码的,例如,我得到了这样的理论:
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;:
var window = {};
window.Window = function Window() { [native code] }
window.__proto__ = Window;我真的认为我明白了,但是如果我错了,请纠正我。
发布于 2014-02-16 17:46:12
假设您的网页上有一些脚本块:
<script>
var loc = window.location;
...
</script>以下是浏览器在需要运行该块中的脚本时所做的工作:
var window = {}; window.window = window;window.__proto__ = Window;internalEval("content of that script block", window);因此,如果您的脚本中有这样的语句:
someGlobalVar = 1234;该someGlobalVar将作为窗口对象的属性创建:
window.someGlobalVar; // -> 1234 value here而且您不能创建名为window的全局函数,因为该变量已经定义并配置为只读。所以上面的window.window = window;语句实际上如下所示:
Object.defineProperty(window, "window", {
enumerable: false,
configurable: false,
writable: false,
value: window
});发布于 2014-02-16 17:41:03
根据规格的说法,需要有一些全局对象来完成某些角色。它提供了全球环境,这是最外层的范围。全局对象是由JavaScript引擎本身创建的,在任何JavaScript代码实际运行之前;您无法真正表达在JavaScript代码本身中是如何工作的。
对于在具有DOM的上下文中执行的浏览器,window恰好是该全局对象。每个JavaScript运行时都有一个;但是它是什么取决于它在哪里运行。例如,在Node中,global对象(多好的名字啊?)扮演那个角色。
发布于 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在评论中指出。
https://stackoverflow.com/questions/21813806
复制相似问题