1. 程式人生 > >這道javascript 面試題 你必須會

這道javascript 面試題 你必須會

fun prot 試題 concat 作用 val function 運算 return

實現一個函數,運算結果可以滿足如下預期結果:

add(1)(2) // 3

add(1, 2, 3)(10) // 16

add(1)(2)(3)(4)(5) // 15

話不多說,實現如下:

function add(){

  var arr=Array.prototype.slice.call(arguments)
  function fn(){
    arr=arr.concat(Array.prototype.slice.call(arguments))
    return fn
  }
  fn.valueOf=function(){
    return arr.reduce(function(a,b){
      return a+b
    })
  }
  return fn
}

思路很簡單,首先要實現調用之後還可以調用無線調用的效果必須這麽寫,function f(){return f};

實現最後的求和就必須又一個作用域,這個作用下可以把所有輸入值保存下來,所以不是如下這樣函數

var add=(function() {
  var arr=[]
  var ad=function (){
    arr=arr.concat(Array.prototype.slice.call(arguments))
    return ad
  }
  ad.valueOf=function(){
    return arr.reduce(function(a,b){
      return a+b
    })
  }
  return ad
})()

這道javascript 面試題 你必須會