JS内部函数一道自测题

来源:互联网 发布:淘宝店改区域 编辑:程序博客网 时间:2024/05/21 01:52

题目如下

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