2010-04-29 79 views
4

我開始爲一個項目學習javascript,我發現了一個腳本來完成我需要做的一部分,我想知道它是如何工作的,對我而言以及需要修改的情況。這些行是幹什麼的?

最初它是在頁面內部使用的,現在我已經把它放在一個文件中,並且不再工作,所以我將它分成幾部分,因爲我沒有得到所有的東西。
下面是現在最困擾我的東西:

1)這是函數聲明嗎?它叫什麼名字?它如何被調用?

(function() { 
    //some code 
})(); 

2)是怎麼回事這裏

var VARIABLE = VARIABLE || {}; 

3)我是不是定義的methodCall這裏實施的任何線索?像重寫Java中的方法?

VARIABLE.methodCall = function(parameter) { 
    console.log("parameter was: " + parameter); 
}; 

非常感謝您的幫助。

+0

刪除其它的值要真正瞭解上述聲明背後的概念,我強烈建議您閱讀道格拉斯康樂福「使用Javascript - 好的部分」。或者,您可以在YouTube上觀看他的視頻 - http://www.youtube.com/watch?v=hQVTIJBZook – 2010-05-02 18:56:28

+0

@sri:謝謝,我會檢查它。 – 2010-05-03 07:57:25

回答

10

1)創建一個未命名的函數並執行它。這對創建在函數外部不可見的局部變量的作用域很有用。除此之外,你不需要調用它,最後的'()'會爲你做。

2)如果變量爲空/未定義,則將其設置爲空對象。

3)是的,正如你期望的那樣,你可以調用VARIABLE.methodCall(參數)

響應您的評論,這裏是一個常見的例子

function foo (VARIABLE) { 
    var VARIABLE = VARIABLE || {}; 
} 
+0

感謝您的回答,如果VARIABLE定義在該行中,它如何可以爲null/undefined? – 2010-04-29 22:28:52

+0

好吧,我明白了,現在很清楚。謝謝。 – 2010-04-29 22:36:00

+1

請注意,在第二個示例中,無論外部VARIABLE的值是什麼,VARIABLE都會始終初始化爲{{},因爲外部函數將在該函數創建的作用域中被遮蔽* 。 – CMS 2010-04-29 22:47:15

3
(function() { 
    //some code 
})(); 

只是應工作運行//some code,但其中的變量不會保留,因爲function() { }塊會引入新的內部作用域。

function() { }表示法被稱爲閉包,它允許變量爲函數。例如,

(function() { })()是一種常見的JavaScript習慣用法。在)之後,有(),它在作爲函數之前調用表達式,允許使用so (callback || function(x) { return x; })(x)

var a = function a() { return 1; }

var VARIABLE = VARIABLE || {};使用短路,或者如果VARIABLE沒有定義,VARIABLE將被設置爲{},一個空對象。 (否則,如果VARIABLE存在,則不會改變)

x = A || B表示「如果A評估爲真,x是A,否則,x是B.」。

VARIABLE.methodCall,如你所說,增加了methodCallVARIABLE,沒有VARIABLE

+0

我不認爲「閉包」是命名任何函數表達式的正確術語,只有當在另一個函數內聲明的函數可以訪問這個函數的外部*,綁定它的*封閉範圍時才形成閉包... – CMS 2010-04-29 23:17:30