鍍金池/ 問答/HTML/ 函數參數...arg的一個問題

函數參數...arg的一個問題

function __matchArgs__(fn) {
    return function (...args) {
        console.log(args)
        if (args.length !== fn.length) {
            throw RangeError('Arguments not match!');
        }
        return fn.apply(this, args);
    }
}

var add = __matchArgs__((a, b, c) => a + b + c);

console.log(add(1, 2, 3));

我想請問return function (...args)這里的arg不應該是函數__matchArgs__的形式參數嗎?為什么log出來是fn中的形式參數?

回答
編輯回答
玩控

matchArgs 的形參 fn, 函數返回一個匿名函數有自己的不定參, 函數的形參在定義時決定, 相互之間是獨立的~

2018年6月13日 10:16
編輯回答
乖乖噠

寫成這樣就明顯一點:

function __matchArgs__(fn) {

  function returnFn(...args) {
    console.log(args)
    if (args.length !== fn.length) {
      throw RangeError('Arguments not match!');
    }
    return fn.apply(this, args);
  }
  return returnFn
}

你只是在return的時候“順帶”定義了這個函數,本質上這還是個獨立的函數。而對于一個函數的形參部分而言,在不使用默認參數的情況下,形參部分不會與外部作用域發(fā)生任何聯系

2018年2月12日 08:02