亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

web前端面試一道面試題

web前端面試一道面試題

嗶嗶one 2019-05-21 16:38:34
今天面試的時候一道面試題,大概是這樣的,感覺自己很繞,希望大家幫我看下。謝謝。問題是下面會輸出3次1嗎,如果不會,能修改使其實現嗎?functionnewFun(a){returnfunction(a){console.log(a)}}functionfun(a){console.log(a)newFun((a)=>{console.log(a)})}fun(1)
查看完整描述

2 回答

?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

當然不會了,人肉單步一下就知道了,跳過聲明,從fun(1)進入,請跟著序號走
functionnewFun(a){//2-1:調用newFun,參數為剛剛的箭頭函數
returnfunction(a){//3:返回一個匿名函數,這個匿名函數接受并打印參數a
console.log(a);
}
//4-0:函數newFun結束
}
functionfun(a){//0-1:調用fun,參數1
console.log(a);//1:打印a,即參數1
newFun(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:返回一個匿名函數,這個匿名函數接受并打印參數a
console.log(a);
}
//5-0:函數newFun結束
}
functionfun(a){//0-1:調用fun,參數1
console.log(a);//1:打印a,即參數1
letbrandNewFun=a=>console.log(a);
brandNewFun(a);//2:調用brandNewFun,參數為a,即1
newFun(brandNewFun)(a);//3-0:調用newFun,參數為一個箭頭函數brandNewFun(注意這個函數是作為參數的,此時這個函數沒有被調用)
//5-1:函數newFun的調用已經結束,并且它返回了一個匿名函數,且我們立即調用了這個匿名函數,參數為a,即1,因此這里輸出1
//6-0:函數fun的調用已經結束,該函數沒有返回任何值
}
fun(1);//0-0:調用fun,參數1
//6-1:函數fun的調用已經結束,腳本結束
                            
查看完整回答
反對 回復 2019-05-21
  • 2 回答
  • 0 關注
  • 355 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號