var var1 = 1,
    var2 = 1,
    var3 = 1;

这等价于:

var var1 = var2 = var3 = 1;

我很确定这是变量定义的顺序:var3, var2, var1,这相当于:

var var3 = 1, var2 = var3, var1 = var2;

有什么方法可以在JavaScript中确认这一点吗?可能使用一些分析器?


当前回答

var var var1 = 1, var2 = 1, var3 = 1;

在本例中,var关键字适用于所有三个变量。

var var1 = 1,
    var2 = 1,
    var3 = 1;

这并不等同于:

var var1 = var2 = var3 = 1;

在这种情况下,在屏幕后面,var关键字仅适用于var1,因为变量提升,表达式的其余部分正常计算,因此变量var2, var3将成为全局变量

Javascript对这段代码的处理顺序如下:

/*
var1 is local to the particular scope because of var keyword
var2 and var3 will become globals because they are used without var keyword
*/

var var1;   //only variable declarations will be hoisted.

var1 = var2 = var3 = 1; 

其他回答

Coffee-script可以做到这一点。

for x in [ 'a', 'b', 'c' ] then "#{x}" : true

[{a: true}, {b: true}, {c: true}]

a = (b = 'string is truthy'); // b gets string; a gets b, which is a primitive (copy)
a = (b = { c: 'yes' }); // they point to the same object; a === b (not a copy)

(a && b)逻辑上是(a ?B: a),行为像乘法(例如;!!A * !!

(a || b)逻辑上是(a ?A: b),并表现为加法(例如。!!A + !!

(a = 0, b)是不关心a是否为真,隐式返回b


a = (b = 0) && "nope, but a is 0 and b is 0"; // b is falsey + order of operations
a = (b = "b is this string") && "a gets this string"; // b is truthy + order of ops

JavaScript操作符优先级(操作顺序)

请注意,逗号操作符实际上是特权最低的操作符,而圆括号是特权最高的操作符,在构造单行表达式时,它们是齐头并进的。


最终,你可能需要“thunk”而不是硬编码的值,对我来说,“thunk”既是函数,也是结果值(同样的“东西”)。

const windowInnerHeight = () => 0.8 * window.innerHeight; // a thunk

windowInnerHeight(); // a thunk

var var var1 = 1, var2 = 1, var3 = 1;

在本例中,var关键字适用于所有三个变量。

var var1 = 1,
    var2 = 1,
    var3 = 1;

这并不等同于:

var var1 = var2 = var3 = 1;

在这种情况下,在屏幕后面,var关键字仅适用于var1,因为变量提升,表达式的其余部分正常计算,因此变量var2, var3将成为全局变量

Javascript对这段代码的处理顺序如下:

/*
var1 is local to the particular scope because of var keyword
var2 and var3 will become globals because they are used without var keyword
*/

var var1;   //only variable declarations will be hoisted.

var1 = var2 = var3 = 1; 

实际上,

var var1 = 1, var2 = 1, var3 = 1;

不等于:

var var1 = var2 = var3 = 1;

区别在于作用域:

函数good() { Var var1 = 1, var2 = 1, var3 = 1; } 函数bad() { Var var1 = var2 = var3 = 1; } 好(); console.log (window.var2);/ /定义 坏的(); console.log (window.var2);/ / 1。Aggh !

实际上这表明赋值是正确结合的。坏例子相当于:

var var1 = (window.var2 = (window.var3 = 1));

证明

let var1 = {set a(a){console.log(1)}}, var2 = {set a(a){console.log(2)}}, var3 = {set a(a){console.log(3)}}; var1.a = var2.a = var3.a = 1