Skip to content

js编程题

jiang2016tao edited this page Nov 17, 2017 · 3 revisions

1.编写函数f,例如:f(1,2)(3)(4,5)实现(1+2)*3*(4+5),返回结果81。

var f = (function () {
        var initArgument = 1;//默认初始值为1
        return function(num) {
            var lens = arguments.length;
            var totals = 0;//这边通过遍历拿参数和存储在totals
            if(lens>0){
                for(var i = 0;i<lens;i++){
                    totals += parseInt(arguments[i]);
                }
            } else {
                return initArgument;//这边最关键,通过lens判断函数是否调用结束,当参数为0时,表示已经结束,这时候把initArgument这个值返回去就是所有的参数和的乘积了
            }
            initArgument *= totals;//每次函数调用都会进行参数和相乘
            console.log(arguments.callee)
            return arguments.callee;//包含当前正在执行的函数,这个是返回上面重复调用的函数地方(arguments.callee就是指第13行到26行这个闭包)
        }
    })();
    var result = f(1,2,3)(4,5)();
    console.log("结果"+result)  

这个还是会有些问题,一定要有个空的()。arguments.callee可以参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments/callee

Clone this wiki locally