Maison > Questions et réponses > le corps du texte
Nous savons tous que l'affectation en JavaScript se fait de droite à gauche
var a = b = c
L'instruction ci-dessus est en fait exécutée comme ceci
b = c
var a = b
Mais que se passe-t-il si quelqu'un est impliqué ? Un exemple que j'ai vu hier
var foo = { a: 2 }
var bar = foo
foo.x = foo = { b: 3 }
Les deux premières lignes sont très simples, elles pointent bar vers foo.
Dans la troisième ligne, foo = { b: 3 } est exécuté au début, ce qui redirige foo vers un autre objet.
La phrase suivante foo.x = foo, je pensais au départ que foo.
foo = {
b: 3,
x: {
b: 3,
x: {
b: 3,
x: {
......
}
}
}
}
Mais le test réel a révélé que foo.x dans la phrase foo Mais l'exécution réelle se fera-t-elle de droite à gauche ? PHPz2017-05-18 10:53:04
Je viens de voir une bonne explication d'un grand maître (je vérifie les informations). L'explication approximative de l'affectation continue des objets est la suivante : foo.x = foo = { b: 3 }, d'abord lors de l'exécution de l'interpréteur. Vérifiez si foo.x et foo ont été créés. Sinon, créez-les et pointez-les tous les deux vers l'objet le plus à droite. Évidemment, foo est créé et pointe vers { a: 2 }, foo.x n'a pas encore été créé, alors créez-le. et laissez-le pointer vers null À ce moment-là, bar et foo pointent tous deux vers {a:2,x:null}, puis pointez-les tous les deux vers l'objet {b:3} à ce moment-là, bar pointe. vers {a:2,x:{b:3}. },foo pointe vers {b:3} ;
PHP中文网2017-05-18 10:53:04
Nous venons d'aborder cette question récemment, et nous sommes arrivés à la conclusion que : foo.x
中的 foo
实际是对 { a: 2 }
est une référence, mais l'ordre d'exécution est toujours de droite à gauche, cela ne fait aucun doute.
var foo = { a: 2 }
var bar = foo.a = 3
console.log(bar) //3
var foo1 = { a: 2}
var bar1 = foo1.a
foo1.a = 3
console.log(bar1) //2
漂亮男人2017-05-18 10:53:04
L'affectation est une expression,
L'associativité est de droite à gauche, c'est-à-dire que a = b = c
est a = (b = c)
a = b = c
是a = (b = c)
返回值是,等号右边那个表达式的返回值,即 b = c
的返回值是c
La valeur de retour est la valeur de retour de l'expression à droite du signe égal, c'est-à-dire que la valeur de retour de b = c
est la valeur de c code>.
仅有的幸福2017-05-18 10:53:04
Local de gauche à droite (.), macro de droite à gauche (=). Ce foo n'est pas ça foo .
foo.x = foo = { b: 3 }
Lorsque lit le deuxième foo, il a déjà obtenu la référence de { a: 2 }
du premier foo et attend d'attribuer une valeur à son attribut x.
滿天的星座2017-05-18 10:53:04
L'affectation se fait de droite à gauche, mais le code doit être traité avant l'exécution. foo.x = foo = { b: 3 }
,对属性的处理是按值进行的,即此时已经定位到了{ a: 2 }
L'emplacement de stockage réel de cet objet est également l'affectation à l'attribut x de l'objet réel, qu'il s'agisse de l'objet pointé. to by foo ou bar L'objet pointé. L'affectation à un objet modifie l'adresse de l'objet réel stocké dans l'objet, c'est-à-dire modifie le pointeur de foo.
高洛峰2017-05-18 10:53:04
Je ne pense pas que cette façon d’écrire ait du sens.
Dans la production réelle, si vous rencontrez beaucoup de code de ce type, pouvez-vous le comprendre en un coup d'œil ?
Tout comme maintenant, combien de personnes ayant répondu à la question peuvent l'expliquer en termes simples ?
怪我咯2017-05-18 10:53:04
var a=b=c;
b=c;//c
a=c;
foo.x = foo = { b: 3 }
foo = { b: 3 };//返回值为 { b : 3 } 的指针,下同
foo.x = { b : 3 }的指针;
Mais en exécutant les trois instructions ci-dessus dans l'ordre, les résultats seront différents, car foo.x a été préparé pendant la phase d'analyse, donc il pointe en fait vers bar.x
Code équivalent réel
foo.x = foo = { b: 3 }
foo = { b: 3 };//{ b : 3 }
bar.x = { b : 3 }的指针;