(t / = d / 2)在此代码中的含义是什么?

时间:2014-03-12 00:00:40

标签: javascript jquery easing

jquery.easing plugin中有很多类似的方法:

easeInOutQuint: function (x, t, b, c, d) {
    if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
    return c/2*((t-=2)*t*t*t*t + 2) + b;
}

(t/=d/2)严重惹恼了jshint!

Linting assets/js/_main.js ...ERROR
[L119:C13] E030: Expected an identifier and instead saw '='.
    if ( (t/=d/2) < 1) {
[L119:C14] E020: Expected ')' to match '(' from line 119 and instead saw 'd'.
[L119:C19] W116: Expected '{' and instead saw '<'.
[L119:C19] E030: Expected an identifier and instead saw '<'.
[L119:C19] W030: Expected an assignment or function call and instead saw an expression.
[L119:C20] W033: Missing semicolon.
[L119:C21] W030: Expected an assignment or function call and instead saw an expression.
[L119:C22] W033: Missing semicolon.
[L119:C22] E030: Expected an identifier and instead saw ')'.
[L119:C22] W030: Expected an assignment or function call and instead saw an expression.
[L119:C23] W033: Missing semicolon.

(为简洁起见,删除了重复的JS Lint输出行)

(t/=d/2)在这做什么?

我想修复它(告诉咕噜忽略它,我现在已经做过),但我不明白它在做什么。正则表达某种?请注意,td作为参数传入。算术速记?既?

编辑

感谢快速的快速回答。将行更改为if ( (t = t / (d / 2)) < 1)让jshint停止烦恼。将添加答案为什么jshint / jslint选择抛出此错误。 TL; DR:因为我发生了什么:“这是算法还是正则表达式?”

4 个答案:

答案 0 :(得分:6)

jsHint这里错了。也就是说&#39; S

t /= d / 2

表示

t = t / (d / 2)

请注意,括号在替代版本中很重要,因为通常/运算符从左到右绑定。 /=运算符的优先级低于/

无论如何,整个事物的价值将是&#34; t&#34;的结果(更新)值。

现在,从更广泛的意义上说,jsHint 可能正确地抱怨它的含糊不清,但那是一种风格问题。运算符赋值运算符是一个相当古老的传统,至少可以追溯到C。

答案 1 :(得分:1)

它说t = (t / (d / 2)); - 这两个陈述是等价的。

/=运算符是运算符的一元版本,除以右侧操作数并将结果赋值给左侧的变量。

答案 2 :(得分:1)

这是速记。

$ a / = $ b;与$ a = $ a / $ b;

相同

(t / = d / 2)与t = t /(d / 2)

相同

答案 3 :(得分:0)

为什么我首先得到错误:

  

引发此错误以突出显示可能令人困惑的代码段。如果你没有修复这个错误,你的代码就会正常运行,但是对其他人来说可能会让人感到困惑,尤其是乍一看有人快速搜索你的脚本。

     

/字符在JavaScript中含糊不清。它可以表示正则表达式文字的开头或结尾,如上例所示,也可以解释为除法运算符。与大多数算术运算符一样,除法运算符可以与赋值运算符组合以生成简写:

来自:http://jslinterrors.com/a-regular-expression-literal-can-be-confused-with/