您可以同时将两个变量初始化为相同的值,有点像
var foo, bar;
foo = bar = 10;
但没有类似的简单机制可以将,比如,5 同时加到 foo
和 bar
。当然,只需执行以下操作就足够简单了
foo += 5; // foo is now 15
bar += 5; // bar is now 15
但这需要两个操作。
技巧是
foo += -bar + (bar += 5);
// foo and bar are now 15
您可能永远不会需要这个,只是知道它是可能的很有趣。
感谢 Matheus Avellar 提供了这个令人费解的小技巧,他还解释了
-bar
被解析并成为bar
的负值,即 -10。然后,a += 5
运行并将bar
设置为 15 (10 + 5)。最后,它将两个值加起来 (-10 + 15) 并给出旧的bar
和新的bar
之间的差值,即 15。
或者像这样 :)
‘foo = bar += 5’ 将只是将 ‘foo’ 设置为等于 ‘bar + 5’。
@William,这是 Chris 所需要的。他希望将两个变量都初始化为 10
然后将 5 加到它们中的每一个
每个数学运算都会返回它的新值
@Kevin 在他的示例中,他将两者都设置为 10,但练习的关键是,如果你有两个不同的变量,你希望它们都增加 5。
正是这种东西支持 Douglas Crockford 将 JavaScript 扩展到极致的想法:“就像我们可以轻松地定义新变量一样,我们(可以)让程序员添加新的运算符和新的语句。” http://javascript.crockford.com/tdop/tdop.html
是的,这很好用,感谢你的建议。我不明白 William 说它不能用是什么意思。
如果我在代码中看到类似的东西,我可能会花接下来的两个小时试图理解 **为什么**。
这样的代码只用于教育,而不是生产。
你说的是
foo += 5; bar += 5;
然而,
foo += -bar + (bar += 5);
在这方面更糟糕,因为这需要四个操作。你可以用foo -= bar - (bar += 5)
将其减少到三个,这样做的额外好处是让你的代码更加难以理解。