[英]why use callback function in javascript when I can invoke directly a function
[英]Why the output are different when I use the parameter to call the function, and invoke the function by() in Javascript?
function a() {
console.log('A!');
function b(){
console.log('B!');
}
return b;
}
當我這樣做的時候
var s = a();
這是輸出:
A!
當我這樣做的時候
a();
輸出如下:
A!
ƒ b(){
console.log('B!');
}
我不知道為什么輸出會不同。
因為函數a
返回函數b
。
因此,執行此console.log(a())
將打印功能b
的源代碼。
如果要執行返回的函數,只需調用它:
function a() { console.log('A!'); function b() { console.log('B!'); } return b; } var s = a() console.log(s); console.log("--------------------------------------") s();
發生這種情況是因為您返回的是b
本身,而不是b
的結果( b()
)。
並且,因為您已經在控制台中運行了該函數,所以a
(即函數b
)的結果將以其“代碼形式”顯示。
我花了一些時間來理解您的問題,但為了我的辯護,似乎有多個問題合並在一起,其中充斥着矛盾的陳述,遺漏和錯別字(“ by()”而不是“ b()”?)。 簡而言之,我們可以在您的腦海中感到困惑:-)
例如,您談論參數,但是沒有一個函數使用參數。 而且,您似乎相信您在某個時候調用了b
,但是沒有什么像b();
在您的代碼中。 最后,您永遠不會告訴我們,但是您是直接在瀏覽器的控制台中編碼,對嗎?
話雖如此,這就是我要總結的主要問題:
為什么
var s = a();
和a();
有不同的輸出?
您說var s = a();
打印A!
,而a();
打印A!
加功能b
。 實際上, a();
不打印功能b
,此附加輸出來自瀏覽器的控制台。 請記住,有兩種類型的輸出,您使用console.log(...)
明確要求的輸出,以及由控制台本身產生的輸出。 正如epascarello所說,“在控制台中輸出最后一條語句”。 如果你寫a();
進入控制台並按ENTER鍵 ,最后一個語句是a()
,由於a
返回b
,因此控制台輸出函數b
。 如果您寫var s = a();
, a
仍會返回b
但控制台不會告訴您,因為a()
不再是最后一條語句。 我不確定,但是在這種情況下,我會說var
是最后一條語句,並且由於var
返回任何內容,因此控制台不輸出任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.