为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 1906 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信