2012-01-06 81 views
2

我有一個關於Javascript變量聲明的問題。 您能否告訴我下面兩種定義方式有什麼區別? 爲什麼alertMsg會以第一種方式執行,而不是以第二種方式執行? 在此先感謝。JavaScript變量聲明的不同方法

// 1

var alertMsgInvoker = alertMsg ('hi there'); 
function alertMsg (msg) { 
     alert(msg); 
} 

// 2

var alertMsgInvoker = function() { 
     alertMsg ('hi there'); 
} 
function alertMsg (msg) { 
     alert(msg); 
} 

回答

3

在第一個示例中,您將調用alertMsg ('hi there');的結果分配給變量alertMsgInvokeralertMsg沒有返回值alertMsgInvoker的事實既不在這裏,也不在那裏。

在第二個示例中,聲明爲alertMsgInvoker是一個函數,它在調用時調用函數alertMsg。爲了獲得相同的結果,在你的第一個例子,你的第二個需要閱讀:

var alertMsgInvoker = function() { 
     alertMsg ('hi there'); 
} 
function alertMsg (msg) { 
     alert(msg); 
} 

// Now call alertMsgInvoker 
alertMsgInvoker(); 
+0

我明白了。 var alertMsgInvoker = function(){...}等於函數alertMsgInvoker(){...} - zjy2004ren剛纔 – zjy2004ren 2012-01-06 12:33:29

+0

@ zjy2004ren - 基本上就是這樣! :) – Rob 2012-01-06 12:34:29

3

你永遠不會調用在第二個例子中的功能。你定義一些,但從來沒有打電話給他們。

在第一個例子,你叫alertMsg當你定義alertMsgInvoker,在第二個定義調用alertMsg - 但既不調用的函數。

1

在第一種情況下,你與參數「你好」調用函數ALERTMSG();該函數被調用來觸發警報功能。該函數不返回任何內容,但仍然將函數的返回值綁定到變量alertMsgInvoker。

在第二種情況下,您向varybel alertMsgInvoker聲明一個函數,然後聲明一個名爲alertMsg的函數。你從來沒有在這裏發揮任何功能。這就是爲什麼第二個示例不顯示警報框的原因。

+0

您確定該警報不會在第一個示例中觸發? – 2012-01-06 12:24:47

+0

我的不好,用變量聲明函數。 – 2012-01-06 12:27:09

1

第一種情況,您正在調用函數alertMsg,它返回undefined。

var alertMsgInvoker = alertMsg ('hi there'); 
// assign the return value (undefined) to variable alertMsgInvoker 

第二種情況,您剛剛定義了一個變量alertMsgInvoker,這是一個函數,但從未被調用。