簡體   English   中英

當我使用參數調用函數並在Javascript中調用by()函數時,為什么輸出會不同?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM