题目如下
var add = function(){
var sum = 1;//父函数的变量
var tem = function(x){
sum = sum + x;
return tem;//子函数;实现sum值增加x
}
tmp.toString = function(){//tmp的toString函数;返回此时的sum值
return sum;
}
return tem;//将子函数返回;方便外部调用
}
//求alert(add(1)(2)(3))的输出值
通过对内部函数概念的理解分析,我们可以得出如下结论
1. 内部函数受其父函数作用域限制不能够被直接调用
2. 要想调用内部函数,要么定义全局变量并且将内部函数赋值给全局变量,通过调用全局变量来调用内部函数;
要么将内部函数直接返回给外部函数;
再来一步步解析这道题
1.add(1)可理解为:var innerFunction = add(1),由此我们获取到了内部函数对象并且执行父函数逻辑定义变量sum并赋值1;
2.那么innerFunction(2)的执行结果就不难解析了,即sum = 1+2;此时sum为3
3.以此类推,另外一个内部函数对象再执行下一步运算;此时sum =3+3;
4.alert调用tem的toString方法,输出运算最终结果6
举一反三不难得出 alert(add(100)(2)(3))的输出值为6;alert(add(1)(3)(3))的输出值为7