如何在javascript中构建具有多个胖箭头子句的函数?

时间:2016-06-21 12:14:32

标签: javascript arrow-functions

我从功能背景来看Javascript。

我想象这样的东西来计算3的阶乘:

var Function1 =    
{
  (0) => 1,
  (1) => 1,
  (n) => n*Function1(n-1)
}

document.write(Function1(3),"<br/>")

但它没有用。

是否有类似于我在javascript中使用胖箭头表示法计算6的示例?

2 个答案:

答案 0 :(得分:4)

您无法在JS中以描述性/声明性方式执行此操作,但您可以听取参数的值并做出相应的反应:

var Function1 = (n) => {
  if (n === 0) return 1;
  if (n === 1) return 1;
  return Function1(n-1)*n;
}
document.write(Function1(3),"<br/>"); // 6

另一种方法是返回curried function

var Function1 = (n) => {
  if (n === 0) return () => 1;
  if (n === 1) return () => 1;
  return () => Function1(n-1)()*n;
}
document.write(Function1(3)(),"<br/>"); // 6

注意第二个函数调用Function1(3)()

您的示例可能会被三元运算符缩短一点,但它会影响可维护性和可读性:

var Function1 = (n) => [0, 1].includes(n) ? 1 : Function1(n-1)*n;
document.write(Function1(3),"<br/>"); // 6

答案 1 :(得分:1)

Simplified&#34; one-line&#34;替代使用Number构造函数:

var Function1 = (n) => { return Number(n === 0 || n === 1) || Function1(n-1)*n; };

console.log(Function1(0));  // 1
console.log(Function1(1));  // 1
console.log(Function1(4));  // 24