函数的实际.length何时不足以_.curry()

时间:2018-02-07 20:36:10

标签: reactjs webpack lodash redux-thunk currying

我遇到了一个不稳定的情况,即在a上使用_.curry的函数正在立即调用该函数。在阅读了lodash文档之后,我们发现我们需要声明arity,这要归功于写得很好的文档:

  

如果func.length不够,可以指定func的arity。

但是,我很好奇是否有人知道为什么会发生这种情况的实际例子(不一定是我的代码库中发生的具体原因)。

1 个答案:

答案 0 :(得分:1)

  

但是,我很好奇是否有人知道为什么会发生这种情况的实际例子(不一定是我的代码库中发生的具体原因)。

示例:

  • 该函数使用arguments对象而不是形式参数:



function sum() {
  var total = 0;
  for (var i = 0; i < arguments.length; i += 1) {
    total += arguments[i];
  }
  return total;
}

console.log('length', sum.length);   // 0
console.log('result', sum(3, 4));
&#13;
&#13;
&#13;

  • 该功能使用&#34;休息&#34;参数:

&#13;
&#13;
function sum(...values) {
  return values.reduce((a, v) => a + v, 0);
}

console.log('length', sum.length);    // 0
console.log('result', sum(3, 4));
&#13;
&#13;
&#13;

  • 该功能已经过部分评估或已经过其他一些转型:

&#13;
&#13;
function add(x, y) { return x + y; }

var inc = _.partial(add, 1);

console.log('add length', add.length);        // 2
console.log('inc length', inc.length);        // 0
console.log('result', inc(8));

var squarePlusOne = _.flow(x => x * x, x => x + 1);

console.log('length', squarePlusOne.length);  // 0
console.log('result', squarePlusOne(7));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
&#13;
&#13;
&#13;

  • 该功能具有比您实际想要的更多参数(即它具有可选参数)

&#13;
&#13;
function combine(x, y, z) {
  return x + y + (z || 0);
}

console.log('length', combine.length);   // 3
console.log('result', combine(3, 4));
&#13;
&#13;
&#13;