我在一些JavaScript中遇到了一个相当混乱的陈述:
if (n = "value", a==b) {...
我认为首先分配值n
,然后执行比较(a==b
)以确定是否继续if
语句。但为什么?这样做有什么好处呢...
n = "value";
if (a==b) {...
...或
if (a==b) {n = "value"; ...
答案 0 :(得分:3)
在JavaScript中,每当您在一对括号中放置多个表达式时,它们将被计算为最后一个表达式,如下例所示:
var a = (1, 2);
var b = a + 1; // b = 2 + 1 = 3
因此,在您的情况下,解释程序执行归因n = "value"
,然后解析if a == b
作为条件。它与:
n = "value";
if (a == b) {
// ...
}
This article解释了这种行为。
但是,这不会将n
限制为if
的范围。同样的事情发生在for
循环中的var声明:
for (var i = 0; i < 10; i++) {
// Do stuff...
}
console.log(i); // Logs 10
正如Ethan Brown所提到的,关于变量提升也很好,这基本上就是说,在JavaScript中,可以在声明值之前将值分配给变量。以下代码显示了此行为,并从this MDN article中提取:
bla = 2
var bla;
// The above code is valid, since
// it's implicitly understood as:
var bla;
bla = 2;
功能也是如此:
foo();
function foo() {
console.log('bar');
}
答案 1 :(得分:3)
您对意义的评估是正确的。除了紧凑性之外没有其他优点。许多人会考虑这种不良做法,但这并不会让我感到烦恼。
当你开始调用有副作用的函数时,它变得棘手...那么你可以做一些非常奇怪的事情。
答案 2 :(得分:1)
你是对的 - 这只是一个非常令人困惑的方式来分配变量然后运行if
语句。它是有效的代码,但相当于不那么令人费解的版本,所以这很可能只是某个人太聪明的情况。