JS中的前缀操作中的左侧表达式无效,用于循环到胖箭头函数

时间:2017-09-29 01:18:41

标签: javascript function arrow-functions

我一直在玩以下功能:

s = function(x) {
  for(n=10,z=0;~(--n);){
    z+=pow(-1,n)/fac(2*n+1)*pow(x,2*n+1)
  }
  return z
}

fac是一个阶乘函数,pow是一个幂函数(对于那些在家里玩的人),我在这个函数之外定义了它。 s意味着是正弦函数的泰勒级数推导,因此s(Math.PI/4)将作为0.5的平方根的非常接近的近似值返回。

我想把它作为一个箭头函数,z自动返回,但是发现自己在这一点失败了“前缀操作中的无效左侧表达式”错误......

我尝试时收到此错误:

s=x=>~(--(n=n||10))?s((z=z||0)+=pow(-1,n)/fac(2*n+1)*pow(x,2*n+1)):z

我知道我错过了一些荒谬的东西......但是我不能把手指放在它上面......任何人都可以伸出援助之手吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

表达式--(n=n||10)(z=z||0)+=pow(-1,n)…都是语法错误。 --100+=…显然无效,您无法分配字面值。

答案 1 :(得分:1)

你可以把所有东西都变成1个功能(包括阶乘和功率),但那会更难以理解:

s=(x)=>((n,r)=>(r=(s,o=0,f=y=>!y||y*f(y-1),p=(b,w)=>eval('b*'.repeat(w)+1))=>!n--?o:o+r(s, p(-1, n)*p(x,2*n+1)/f(2*n+1)))(x))(10);

s=(x)=>((n,r)=>(r=(s,o=0,f=y=>!y||y*f(y-1),p=(b,w)=>eval('b*'.repeat(w)+1))=>!n--?o:o+r(s, p(-1, n)*p(x,2*n+1)/f(2*n+1)))(x))(10);

console.log(s(Math.PI/4));
console.log(Math.sqrt(0.5));

答案 2 :(得分:0)

使用Bergi的建议并在行动后转移n--我发现以下工作:

s=(x)=>~(n||10)?(s(z=(z||0)+p(-1,n)/f(2*n+1)*p(x,2*n+1))&&(n--)):z