Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
278 views
in Technique[技术] by (71.8m points)

javascript - How to call this default args function more than once?

I have encountered a question where I need to allow default args to be set on a function in JavaScript:

function dfltArgs(func, params) {

  const strFn = func.toString()
  console.log(strFn)
  const args = /(([^)]+))/.exec(strFn)[1].split(',')

  const defaultVal = (arg, val) => typeof arg !== 'undefined' ? arg : val

  return (...dynamicArgs) => {
    const withDefaults = args.map((arg, i) =>
      defaultVal(dynamicArgs[i], params[args[i]]))
    return func(...withDefaults)
  }

}

function add (a, b) { return a + b }
var add_ = dfltArgs(add,{b:9})
console.log(add_(10)) // Should be 19
var add_ = dfltArgs(add_,{b:3})
console.log(add_(10)) // Should now be 13
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Instead of your complicated default args thing, why not just use some arrow functions with real default arguments:

 var _add = (a, b = 8) => add(a, b);

That way you can easily change the bound things:

 var add_ = (a = 2, b) => _add(a, b);
 add_() // 10

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...