2017-08-27 14 views
2

我正在查找命令,以了解编译器如何读取代码。它从左到右或从右到左读取代码。 像javascript编译器读取代码行的方式

var a=b=c=100;

在上面的代码

哪个变量将第一值将如何被分配声明。?

+0

你真的在问编译器如何用解释型语言读取代码吗? – Daniel

+0

在这个例子中,你只提供了一个变量(即'a')。它被赋予赋值为'b'的值,赋值为'c',赋值为'100'。 –

回答

0

以下assignemt:

var a=b=c=100; 

等同于以下分配:

var a = (b = (c= 100)); 
 
console.log(a); 
 
console.log(b); 
 
console.log(c);

话虽这么说似乎多张赋值是右结合。

0

MDN docs

赋值运算符是右结合,这样就可以写:

A = B = 5;预期的结果是a和b的值为5.这 是因为赋值运算符返回它分配的值。 首先,b被设置为5.然后a也被设置为5,返回值为 b = 5,也就是赋值的右操作数。

所以对于var a=b=c=100; 第一c,然后b然后a将被分配到100

+0

事情作业运营商是正确的联想对我来说是一个新的。现在我要探索的..谢谢 –

2

让我们考虑你所提供的例子:

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,块范围为constlet)。但是,分配按从左到右的顺序进行。已声明但尚未分配值的变量值为undefined

+0

thanks.it真的帮助 –

相关问题