js函數add(1)(2)(3)(4)...實現無限極累加原理解析

用js 實現一個無限極累加的函數, 形如:
add(1) //=> 1;
add(1)(2) //=> 2;
add(1)(2)(3) //=> 6;
add(1)(2)(3)(4) //=> 10;
以此類推...bash

  1. 咱們要了解一個知識點: 當咱們直接對函數使用 alert()console.log() 時,函數的 toString() 方法會被調用。
function s(a) {
		return a+1
	}
	console.log(s)
    // undefined
複製代碼
  1. 咱們如今對函數s重寫TOString。
function s(a) {
		return a+1
	}
    s.toString = function() {
        return 1
    }
	console.log(s)
    // f 1
    typeof(s)
    // "function"
複製代碼
  1. 咱們如今將函數s包裹起來,返回一個函數,此時造成了一個閉包。
function add(a) {
        function s(a) {
		    return a+1
        }
        s.toString = function() {
            return a
        }
        return s
    }
    console.log(add(2)) // f 2
複製代碼
  1. 稍做修改
function add(a) {
        function s(b) {
            a = a + b
		    return s
        }
        s.toString = function() {
            return a
        }
        return s
    }
    console.log(add(1)(2)(3)(4)) // f 10
複製代碼

收工~閉包

相關文章
相關標籤/搜索