使用文档对象时是否假定了window.document?

时间:2014-07-07 20:57:59

标签: javascript window document

关于w3schools关于the window object的JavaScript参考,文档对象似乎是它的属性。虽然,正如我们所知,文档对象不需要任何明确的window.document,但只需要document。在检查它们是否不同之后,我使用了这段代码:

<script type="text/javascript">
        window.onload = function()
        {           
            alert("Using window.document: " + window.document.images.length);
            alert("Using document: " + document.images.length);
        };
</script>
<img id="1" src="/images/some_pic.gif" />
<img id="2" src="/images/some_other_pic.gif" />

...显示两种方法都打印出2(文档中的图像数量)。这让我对一些我无法在其他地方找到答案的事情感到好奇:

  1. 一种方法比另一种更好吗?尽管我一直使用document,但我发现window.document更合乎逻辑。除此之外,使用其中一种还有其他收获吗?
  2. 假设它是同一个东西,这种类型的“语法”(而一个成员可以立即称为快捷方式)称为某种东西?是否可以通过某种方式对其进行逻辑解释(例如documentwindow.document的引用是什么?
  3. 这些类型的东西是否在语言的其他地方出现过?或者它只适用于文档对象?

1 个答案:

答案 0 :(得分:1)

作为属性附加到window的任何内容都可以在其前面没有window.的情况下访问。每个JavaScript环境都有一个&#34;全局命名空间&#34;。 window是浏览器中的全局命名空间。如果您在node.js中编写JavaScript,那么名为global的对象就是全局命名空间。

如果您声明一个没有var关键字的变量,那么该变量将成为&#34; global&#34;。也许你已经知道了,但你可能不知道的是你的变量实际上变成了window的属性。

function doSomething() {
    var inScope = "I am only accessible within the doSomething function.";
    notInScope = "I am a global variable which means you can access me at window.notInScope.";
}

此外,即使您使用var但它没有包含在任何会限制其范围的内容中,它也会成为一个全局变量。

<script type="text/javascript">
    var isGlobal = "This variable is global even though we used 'var' because it was declared in the root/global scope.";
</script>

http://plnkr.co/edit/a5fanTIJRpxxjjqgrr4D?p=info