2014-12-02 35 views
0

可以在任何函数声明中定义对象文字还是只在窗口对象内定义对象文字?JavaScript中的对象文字只能在窗口对象内定义?

function declaration() 
{ 
    var objectLiteral = { 
     property1: "test1", 
     method1: function() { 
      return "testMethod" 
     } 
    } 
} 
+0

WTH是指“*在窗口对象*中”吗?是的,你的函数声明显然是可行的,你可以通过尝试它来看到。 – Bergi 2014-12-02 17:54:32

+0

@Bergi * window *对象与全局空间是同义的(至少在浏览器窗口*的情况下) – 2014-12-02 17:55:38

+0

感谢Jordan澄清我对窗口对象的意义 – 2014-12-02 17:57:15

回答

2

对象文字可以在任何地方定义 - 但它们受JavaScript的范围限制。

JavaScript范围内容 - 意味着您在范围内声明的任何内容只能在该范围内访问。

约JS有趣的是,功能一等公民,这意味着功能有自己的背景,就像一个对象或全局(窗口对象)的空间。基本上意思是你可以在其他函数中声明函数。

您在一个上下文中定义的任何内容都可用于您创建的任何子上下文。这里是一个例子:

var x = {count: 0}; 
function doSomething() { 
    console.log(x.count); // 0 

    var y = {name: "bologna"}; 

    function printY() { 
     console.log(y.name); // "bologna" 

     var z = 1000; 
    } 

    console.log(z); // undefined 
} 
console.log(y); // undefined 

这是非常简化的,并且范围可以在JS中变得非常复杂。要深入了解JavaScript如何管理范围,请查看this article我写了关于这个主题或者这个优秀的文章Sitepoint Article

+1

Downvoted - 您需要的不仅仅是一个链接,一句话来解释你的答案。 – SomeKittens 2014-12-02 17:57:22

+0

链接只有答案不是很好的答案。请使用此空间放置所有相关信息。链接是很好的引用,但不是很好的答案材料。 – 2014-12-02 17:57:34

+0

我将如何访问用户定义的函数声明中的对象字面值的属性? – 2014-12-02 17:58:33