JavaScript中的复杂计算

时间:2015-04-11 15:39:38

标签: javascript

我无法理解这段代码:

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}},但我仍然无法弄清楚复杂的等式,它太套了根据我的理解,有人可以向我赎罪吗?

4 个答案:

答案 0 :(得分:3)

y - =(1 - (1770 - pencilY)/ 225)* 140;

按顺序:

  1. (1770 - pencilY)
  2. (1770 - pencilY)/ 225
  3. 1 - (1770 - pencilY)/ 225
  4. (1 - (1770 - pencilY)/ 225)* 140
  5. 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使用此运算符优先级进行基本算术计算

  • Brackets
  • Multiplicaiton
  • 加成
  • 减法

( - =是一个优先级更低的赋值运算符)

首先评估更高优先级的操作。 回到你的例子:

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