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

一道js的面试题,有点乱,大神解释下呗~
vartest=(function(a){
this.a=a;
returnfunction(b){
returnthis.a+b;
}
}(function(a,b){
returna;
}(1,2)));
console.log(test(4));//输出什么????
Cats萌萌
浏览 489回答 2
2回答

慕侠2389804

这代码简化之后就是: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===windowreturnfunction(b){returnthis.a+b;//this===window}}(1);//再简化vartest=function(b){return1+b;};console.log(test(4));//输出5

ibeautiful

你可以拆成几部分来看: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的参数4returnfunction(b){//此处的b即test的参数returnthis.a+b;}}所以最后的结果为5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript