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

一道js的面试题,有点凌乱

一道js的面试题,有点凌乱

Cats萌萌 2019-05-23 16:23:46
一道js的面试题,有点乱,大神解释下呗~vartest=(function(a){this.a=a;returnfunction(b){returnthis.a+b;}}(function(a,b){returna;}(1,2)));console.log(test(4));//输出什么????
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

这代码简化之后就是:
vartest=function(b){
return1+b;
};
vartest=function(a){
this.a=a;
returnfunction(b){
returnthis.a+b;
}
}(
function(a,b){
returna;//->自执行匿名函数,这一块就是返回个1
}(1,2)
);
//简化
vartest=function(a){//又是一个自执行匿名函数
this.a=a;//a就是1this===window
returnfunction(b){
returnthis.a+b;//this===window
}
}(1);
//再简化
vartest=function(b){
return1+b;
};
console.log(test(4));//输出5
                            
查看完整回答
反对 回复 2019-05-23
?
ibeautiful

TA贡献1993条经验 获得超5个赞

你可以拆成几部分来看:
varfuncA=function(a){
this.a=a;
returnfunction(b){
returnthis.a+b;
}
}
varfuncAB=function(a,b){
returna;
}
vartest=funcA(funcAB(1,2))
console.log(test(4));
这里面,funcAB实际上等同于返回a,所以又可以精简为:
vartest=funcA(1)
test实际上是接受一个参数,并返回一个匿名函数,而该匿名函数的返回结果为test的参数与该匿名函数的参数之和。
test(4)=funcA(1)(4)=function(a){
this.a=a;//即funcA的参数4
returnfunction(b){//此处的b即test的参数
returnthis.a+b;
}
}
所以最后的结果为5
                            
查看完整回答
反对 回复 2019-05-23
  • 2 回答
  • 0 关注
  • 488 浏览
慕课专栏
更多

添加回答

举报

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