2017-08-27 2 views
2

Je cherche le comment le compilateur lit le code. lit-il le code de gauche à droite ou de droite à gauche. commeLa façon dont le compilateur javascript lit la ligne de code

var a=b=c=100;

dans le code ci-dessus qui variable sera déclaré d'abord comment la valeur sera assignée.?

+0

Demandez-vous vraiment comment le compilateur lit le code, dans un langage interprété? – Daniel

+0

Dans l'exemple, vous avez indiqué qu'une seule variable est déclarée (c'est-à-dire 'a'). La valeur 'b' est affectée à la valeur' c' à laquelle est affectée la valeur '100'. –

Répondre

0

Le assignemt suivant:

var a=b=c=100; 

est équivalent à l'affectation suivante:

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

Cela étant dit, il semble que le assigment mulitple est associative droite.

0

De MDN docs:

Les opérateurs d'affectation sont associatifs droit, vous pouvez donc écrire:

a = b = 5; avec le résultat attendu que a et b obtiennent la valeur 5. Ce est dû au fait que l'opérateur d'affectation renvoie la valeur qu'il a affectée. D'abord, b est mis à 5. Ensuite, le a est également mis à 5, la valeur de retour de b = 5, aka droit opérande de l'affectation.

Donc, pour var a=b=c=100; premier c, puis b puis a seront affectés à 100.

+0

les opérateurs d'attribution de chose sont droit-associative est un peu nouveau pour moi.now je vais explorer that..Merci –

2

Considérons l'exemple que vous avez fourni:

var a = b = c = 100; 

Cela équivaut à:

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 

La chose est que JavaScript si vous attribuez une valeur à la variable que vous ne l'avez pas alors déclaré cette variable devient une variable globale. C'est la raison pour laquelle le code ci-dessus fonctionne. Toutefois, il pourrait aussi causer des problèmes comme dans cet exemple:

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

Qu'est-ce que vous voulez vraiment faire est:

var a = 100, b = a, c = b; 

Cela équivaut à:

var a, b, c; // all variables are hoisted 

a = 100; 
b = a; 
c = b; 

Dans les déclarations de variables JavaScript sont tous hoisted en haut de la portée actuelle (étendue de fonction pour var et étendue de bloc pour const et let). Cependant, les affectations se déroulent dans l'ordre de gauche à droite.Les variables déclarées mais non encore affectées ont la valeur undefined.

+0

thanks.it vraiment aidé –