2012-09-12 30 views
3

我在想你能分配一個變量來提醒嗎?它真的意味着什麼?例如,Javascript分配變量來提醒

var a = alert('test'); 

我嘗試過了,和警報後立即彈出網頁加載其中可變a仍然'undefined'當我打電話吧。難道我們想使它成爲匿名函數與警報裏面像

var a = function(){ alert('test'); } 

如果我們要觸發的快訊?爲什麼JavaScript允許你這樣做?

+0

alert沒有任何返回或其他方式返回'undefined',你想實現什麼? – xdazz

+0

我只是想知道爲什麼JavaScript允許我們這樣做,如果它並不真正意味着什麼。 – peter

+0

@ user1389813:考慮一個函數,根據它的輸入,它可能會返回一些東西,或者可能不會返回任何東西。您希望能夠在返回值時存儲返回值,但爲了保持一致性,JavaScript還允許您在不返回任何內容時爲其分配返回值。從不返回任何東西的函數也可以將其返回值分配給一個變量,以保持一致性。 – icktoofay

回答

5
var a = alert('test'); 

想想這個語句就像任何其他變量賦值一樣。爲了執行分配,首先評估右側。在這種情況下,它是一個函數調用,所以調用該函數並獲得其返回值。在alert的情況下,返回值是undefined。它不會返回任何東西。

然後返回值分配給a,所以a結束與值undefined

作爲語句的副作用,會顯示警告消息。這發生在調用alert()並獲取其返回值的結果。

function foo(x) { 
    return x * 2; 
} 

var a = foo(3); 

此代碼是結構上類似於報警電話,並會導致a是6.但是後來警報()沒有返回值。它更像是這樣的:

function bar(x) { 
    return; 
} 

var a = bar(3); 

現在aundefined

0

如果你這樣做:

var a = function(){ alert('test'); } 

那麼你可以這樣做:

a(); 

因爲你已經定義了一個匿名函數..

警報是一個函數,所以你不能分配任何東西,本身。

如果你想要的東西彈出,如果一個變量的值,你可以這樣做 -

$(document).ready(function() { 
    if (someVar != undefined) { 
    alert(someVar); 
    } 
}); 
2
var a = alert('test'); 

這是說執行alert('test'),並從該函數的返回值賦值給一個變量名爲a

這將是比沒有不同:

var max = Math.max(1,2,3,4); 

其中max最終會與從執行Math.max(1,2,3,4)返回值在它的值4


var a = function(){ alert('test'); } 

這說來聲明一個匿名函數和函數對象賦給變量a。由於該函數剛剛聲明,所以此時不​​執行。你可以在將來執行它a()

1

你的評論:

我只是想知道爲什麼JavaScript允許我們這樣做,如果它並不真正意味着什麼

那麼,JavaScript的(以及任何其他語言,包括英語)只要語法有效,就可以做很多並不意味着什麼的東西。例如,片段波紋管也沒啥意思:

var a; 
a = a; // so what? 

function something() { /* nothing */ } 
var b = something(); // very similar to your example! 

豈不是不太一致,如果你可以從一些功能他人轉讓,但不能?如果語言是鍵入的,那會產生一個錯誤,但由於它不是,它有什麼問題?如果它們沒有返回值,那麼它們的返回值爲undefined,如果嘗試將其分配給變量,則不會有任何中斷。所以你可以做出有時會返回某些東西的函數,有時候不會。如果明智地使用這可能是一個優點。這是一個功能,而不是語言的問題。