2014-12-02 59 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