當然不會了,人肉單步一下就知道了,跳過聲明,從fun(1)進入,請跟著序號走functionnewFun(a){//2-1:調用newFun,參數為剛剛的箭頭函數returnfunction(a){//3:返回一個匿名函數,這個匿名函數接受并打印參數aconsole.log(a);}//4-0:函數newFun結束}functionfun(a){//0-1:調用fun,參數1console.log(a);//1:打印a,即參數1newFun(a=>{//2-0:調用newFun,參數為一個箭頭函數(注意這個函數是作為參數被聲明的,此時這個函數還沒有被調用)console.log(a);});//4-1:函數newFun的調用已經結束,并且它返回了一個匿名函數,但這個匿名函數沒有被一個變量接收//5-0:函數fun的調用已經結束,該函數沒有返回任何值}fun(1);//0-0:調用fun,參數1//5-1:函數fun的調用已經結束,腳本結束可以看出從頭到尾只打印了一次1,只有函數fun中的第一個console.log(a)會被執行,作為迷惑你的另外兩個console.log(a)分別在兩個作為參數和返回值的函數中,但沒有被調用。要使得這兩個console.log(a)被執行,只要調用其所屬的函數即可functionnewFun(a){//3-1:調用newFun,參數為剛剛的箭頭函數returnfunction(a){//4:返回一個匿名函數,這個匿名函數接受并打印參數aconsole.log(a);}//5-0:函數newFun結束}functionfun(a){//0-1:調用fun,參數1console.log(a);//1:打印a,即參數1letbrandNewFun=a=>console.log(a);brandNewFun(a);//2:調用brandNewFun,參數為a,即1newFun(brandNewFun)(a);//3-0:調用newFun,參數為一個箭頭函數brandNewFun(注意這個函數是作為參數的,此時這個函數沒有被調用)//5-1:函數newFun的調用已經結束,并且它返回了一個匿名函數,且我們立即調用了這個匿名函數,參數為a,即1,因此這里輸出1//6-0:函數fun的調用已經結束,該函數沒有返回任何值}fun(1);//0-0:調用fun,參數1//6-1:函數fun的調用已經結束,腳本結束