一道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===windowreturnfunction(b){returnthis.a+b;//this===window}}(1);//再简化vartest=function(b){return1+b;};console.log(test(4));//输出5
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的参数4returnfunction(b){//此处的b即test的参数returnthis.a+b;}}所以最后的结果为5
添加回答
举报
0/150
提交
取消