我正在查找命令,以了解编译器如何读取代码。它从左到右或从右到左读取代码。 像javascript编译器读取代码行的方式
在上面的代码
var a=b=c=100;
哪个变量将第一值将如何被分配声明。?
我正在查找命令,以了解编译器如何读取代码。它从左到右或从右到左读取代码。 像javascript编译器读取代码行的方式
在上面的代码
var a=b=c=100;
哪个变量将第一值将如何被分配声明。?
以下assignemt:
var a=b=c=100;
等同于以下分配:
var a = (b = (c= 100));
console.log(a);
console.log(b);
console.log(c);
话虽这么说似乎多张赋值是右结合。
从MDN docs:
赋值运算符是右结合,这样就可以写:
A = B = 5;预期的结果是a和b的值为5.这 是因为赋值运算符返回它分配的值。 首先,b被设置为5.然后a也被设置为5,返回值为 b = 5,也就是赋值的右操作数。
所以对于var a=b=c=100;
第一c
,然后b
然后a
将被分配到100
。
事情作业运营商是正确的联想对我来说是一个新的。现在我要探索的..谢谢 –
让我们考虑你所提供的例子:
var a = b = c = 100;
这相当于:
var a; // declare a
c = 100; // assign 100 to c
b = c; // assign 100 to b via c
a = b; // assign 100 to a via b
的事情是,在JavaScript中,如果你分配一个值的变量,你有没有再申报该变量成为全局变量。这就是上述代码工作的原因。然而,它也可能会导致问题就像这个例子:
console.log("a", typeof a); // undefined
console.log("b", typeof b); // undefined
console.log("c", typeof c); // undefined
function foo(x) {
var a = b = c = x;
}
foo(100);
console.log("a", typeof a); // undefined
console.log("b", b); // 100
console.log("c", c); // 100
你真正想要做的是:
var a = 100, b = a, c = b;
这相当于:
var a, b, c; // all variables are hoisted
a = 100;
b = a;
c = b;
在JavaScript变量声明中都是hoisted置于当前范围的顶部(功能范围为var
,块范围为const
和let
)。但是,分配按从左到右的顺序进行。已声明但尚未分配值的变量值为undefined
。
thanks.it真的帮助 –
你真的在问编译器如何用解释型语言读取代码吗? – Daniel
在这个例子中,你只提供了一个变量(即'a')。它被赋予赋值为'b'的值,赋值为'c',赋值为'100'。 –