JS for循环到胖箭头函数的前缀操作中的左侧表达式无效
Invalid left-hand side expression in prefix operation in JS for loop to fat arrow function
我一直在玩以下功能:
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 的箭头函数,但我发现自己在这一点上失败了 "Invalid left-hand side expression in prefix operation" 错误...
我在尝试时收到此错误:
s=x=>~(--(n=n||10))?s((z=z||0)+=pow(-1,n)/fac(2*n+1)*pow(x,2*n+1)):z
我知道我遗漏了一些荒谬的东西...但我不能指手画脚...任何人都可以伸出援手吗?
提前致谢。
表达式--(n=n||10)
和(z=z||0)+=pow(-1,n)…
都是语法错误。 --10
和 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
您可以将所有内容都放入 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));
我一直在玩以下功能:
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 的箭头函数,但我发现自己在这一点上失败了 "Invalid left-hand side expression in prefix operation" 错误...
我在尝试时收到此错误:
s=x=>~(--(n=n||10))?s((z=z||0)+=pow(-1,n)/fac(2*n+1)*pow(x,2*n+1)):z
我知道我遗漏了一些荒谬的东西...但我不能指手画脚...任何人都可以伸出援手吗?
提前致谢。
表达式--(n=n||10)
和(z=z||0)+=pow(-1,n)…
都是语法错误。 --10
和 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
您可以将所有内容都放入 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));