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

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

web前端面試一道面試題

web前端面試一道面試題

HUWWW 2018-07-31 12:23:50
今天面試的時候一道面試題,大概是這樣的,感覺自己很繞,希望大家幫我看下。謝謝。問題是下面會輸出3次1嗎,如果不會,能修改使其實現嗎?function newFun(a){        return function(a){            console.log(a)        }    }function fun(a) {    console.log(a)    newFun((a)=>{        console.log(a)    })}fun(1)
查看完整描述

5 回答

?
神不在的星期二

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

肯定不會輸出3個1,首先箭頭函數當參數并沒有執行,其次箭頭函數里執行后的a值也需要返回出來,不然是undefined,可以把這樣來看a是從哪兒來的:

function newFun(a){

        console.log(`C: ${a}`);

        return function(j){

            console.log(`D: ${j}`);

        }

    }

    function fun(a) {

        console.log(`A: ${a}`);

        newFun(((i)=>{

            console.log(`B: ${i}`);

            return i;

        })(a))(a)

    }

    fun(1)


查看完整回答
反對 回復 2018-08-04
?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

當然不會了,人肉單步一下就知道了,跳過聲明,從fun(1)進入,請跟著序號走

function newFun(a) {  // 2-1: 調用newFun,參數為剛剛的箭頭函數

    return function(a) {  // 3: 返回一個匿名函數,這個匿名函數接受并打印參數a

        console.log(a);

    }

    // 4-0: 函數newFun結束

}


function fun(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)被執行,只要調用其所屬的函數即可

function newFun(a) {  // 3-1: 調用newFun,參數為剛剛的箭頭函數

    return function(a) {  // 4: 返回一個匿名函數,這個匿名函數接受并打印參數a

        console.log(a);

    }

    // 5-0: 函數newFun結束

}


function fun(a) {  // 0-1: 調用fun,參數1

    console.log(a);  // 1: 打印a,即參數1

    let brandNewFun = 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的調用已經結束,腳本結束


查看完整回答
反對 回復 2018-08-04
  • 5 回答
  • 1 關注
  • 1973 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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