今天面试的时候一道面试题,大概是这样的,感觉自己很绕,希望大家帮我看下。谢谢。
问题是下面会输出3次1吗,如果不会,能修改使其实现吗?
function newFun(a){
return function(a){
console.log(a)
}
}
function fun(a) {
console.log(a)
newFun((a)=>{
console.log(a)
})
}
fun(1)
当然不会了,人肉单步一下就知道了,跳过声明,从
fun(1)
进入,请跟着序号走可以看出从头到尾只打印了一次
1
,只有函数fun
中的第一个console.log(a)
会被执行,作为迷惑你的另外两个console.log(a)
分别在两个作为参数和返回值的函数中,但没有被调用。要使得这两个console.log(a)
被执行,只要调用其所属的函数即可