我无法理解这段代码:
y -= (1 - (1770 - pencilY) / 225) * 140;
我理解JS中的计算方式:
y += 10; is equal to y = y + 10;
如果我说y = 1 - (1770 - pencilY)
;
在(1770 - pencilY)
计算结果值之前,1
计算的结果是y = 1 - resulting value of 1770 - pencilY
,类似于{{1}},但我仍然无法弄清楚复杂的等式,它太套了根据我的理解,有人可以向我赎罪吗?
答案 0 :(得分:3)
y - =(1 - (1770 - pencilY)/ 225)* 140;
按顺序:
答案 1 :(得分:1)
Here is an article on operator precedence解释了评估不同运营商的顺序。
按顺序:
var a = 1770 - pencilY;
var b = a / 225;
var c = 1 - b;
var d = c * 140;
var y = y - d;
答案 2 :(得分:1)
y += 10;
等于y = y + 10;
是的,所以我们可以将你的表达重写为
y = y - ((1 - (1770 - pencilY) / 225) * 140);
它太嵌套了我的理解
嗯,通过添加括号有助于使嵌套清晰。在你的情况下,已经有很多,所以我们只需要找出-
与/
的{{3}} - 并且分裂更严格。所以
y = y - ((1 - ((1770 - pencilY) / 225)) * 140);
现在,当评估它时,它基本上是从左到右,并且在操作之前是操作数(严格评估)。那么一步一步发生的是
y* = referenceTo("y")
y*' = referenceTo("y")
y' = valueOf(y*') // y
a = 1 // 1
b = 1770 // 1770
pencilY* = referenceTo("pencilY")
pencilY = valueOf(pencilY*) // pencilY
c = b - pencilY // 1770 - pencilY
d = 225 // 225
e = c / d // (1770 - pencilY) / 225
f = a - e // 1 - ((1770 - pencilY) / 225)
g = 140 // 140
h = f * g // (1 - (1770 - pencilY) / 225) * 140
assignTo(y*, g)
答案 3 :(得分:0)
Javascript使用此运算符优先级进行基本算术计算
( - =是一个优先级更低的赋值运算符)
首先评估更高优先级的操作。 回到你的例子:
valOne = (1770 - pencilY)
(最里面的括号具有最高优先级)
valTwo = valOne / 225
(除法优先于减法)
valThree = 1 - ValTwo
(此减法运算符出现在第二个括号内,因此具有比乘法更高的优先级)
valFour = ValThree * 140
(最外层算术运算的优先级高于 - =赋值运算符)
最后:
y = y - ValFour
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence