我在想你能分配一個變量來提醒嗎?它真的意味着什麼?例如,Javascript分配變量來提醒
var a = alert('test');
我嘗試過了,和警報後立即彈出網頁加載其中可變a
仍然'undefined'
當我打電話吧。難道我們想使它成爲匿名函數與警報裏面像
var a = function(){ alert('test'); }
如果我們要觸發的快訊?爲什麼JavaScript允許你這樣做?
我在想你能分配一個變量來提醒嗎?它真的意味着什麼?例如,Javascript分配變量來提醒
var a = alert('test');
我嘗試過了,和警報後立即彈出網頁加載其中可變a
仍然'undefined'
當我打電話吧。難道我們想使它成爲匿名函數與警報裏面像
var a = function(){ alert('test'); }
如果我們要觸發的快訊?爲什麼JavaScript允許你這樣做?
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);
現在a
是undefined
。
如果你這樣做:
var a = function(){ alert('test'); }
那麼你可以這樣做:
a();
因爲你已經定義了一個匿名函數..
警報是一個函數,所以你不能分配任何東西,本身。
如果你想要的東西彈出,如果一個變量的值,你可以這樣做 -
$(document).ready(function() {
if (someVar != undefined) {
alert(someVar);
}
});
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()
。
你的評論:
我只是想知道爲什麼JavaScript允許我們這樣做,如果它並不真正意味着什麼
那麼,JavaScript的(以及任何其他語言,包括英語)只要語法有效,就可以做很多並不意味着什麼的東西。例如,片段波紋管也沒啥意思:
var a;
a = a; // so what?
function something() { /* nothing */ }
var b = something(); // very similar to your example!
豈不是不太一致,如果你可以從一些功能他人轉讓,但不能?如果語言是鍵入的,那會產生一個錯誤,但由於它不是,它有什麼問題?如果它們沒有返回值,那麼它們的返回值爲undefined
,如果嘗試將其分配給變量,則不會有任何中斷。所以你可以做出有時會返回某些東西的函數,有時候不會。如果明智地使用這可能是一個優點。這是一個功能,而不是語言的問題。
alert沒有任何返回或其他方式返回'undefined',你想實現什麼? – xdazz
我只是想知道爲什麼JavaScript允許我們這樣做,如果它並不真正意味着什麼。 – peter
@ user1389813:考慮一個函數,根據它的輸入,它可能會返回一些東西,或者可能不會返回任何東西。您希望能夠在返回值時存儲返回值,但爲了保持一致性,JavaScript還允許您在不返回任何內容時爲其分配返回值。從不返回任何東西的函數也可以將其返回值分配給一個變量,以保持一致性。 – icktoofay