zoukankan      html  css  js  c++  java
  • js实现box(2)(3)这种调用方式的方法

    box(2)(3)函数的调用方法有两种:

    第一种:

    var box = function(num1){
    	return function(num2){
    		return num1+num2;
    	};
    };
    alert(box(2)(3));
    

    这种方法可以实现,但是如果有多个就不适用了,比如box(2)(3)(4)(5)(6)(7)(8)......等等

    第二种:

    function box(x) {
        var sum = x;
        var tmp = function (y) {
            sum = sum + y;
            return tmp;
        };
        tmp.toString = function () {
            return sum;
        };
        return tmp;
    }
    alert(box(2)(3)(4)(5));  //14
    alert(box((2)(3)(4)(5)(2)(3)(4)(5));   //28
    

      

    首先要一个数记住每次的计算值,所以使用了闭包,在tmp中记住了x的值,第一次调用box(),初始化了tmp,并将x保存在tmp的作用链中,然后返回tmp保证了第二次调用的是tmp函数,后面的计算都是在调用tmp, 因为tmp也是返回的自己,保证了第二次之后的调用也是调用tmp,而在tmp中将传入的参数与保存在作用链中x相加并付给sum,这样就保证了计算;

    但是在计算完成后还是返回了tmp这个函数,这样就获取不到计算的结果了,我们需要的结果是一个计算的数字那么怎么办呢,首先要知道JavaScript中,打印和相加计算,会分别调用toString或valueOf函数,所以我们重写tmp的toString和valueOf方法,返回sum的值;

  • 相关阅读:
    第一次冲刺04
    第一次冲刺03
    第一次冲刺02
    团队站立会议3(第二阶段)
    团队站立会议2(第二阶段)
    团队站立会议1(第二阶段)
    Alpha版总结会议
    “来用”alpha版使用说明书
    团队绩效评估计划
    第一阶段其他团队对我们的意见汇总
  • 原文地址:https://www.cnblogs.com/wu-web/p/6892211.html
Copyright © 2011-2022 走看看