Maison > Questions et réponses > le corps du texte
L'objet qui n'est pas défini à l'aide de var dans la fonction doit être un objet global.
À la page P71 du Petit Livre Rouge, quand il est dit que obj est réécrit en interne dans la fonction, cette référence d'objet devient un objet local I. je ne comprends pas~~
PHP中文网2017-06-14 10:55:31
J'ai spécialement sorti mon petit livre rouge. Cette section parle du passage des paramètres par valeur ; ensuite, les objets sont passés par valeur, et ce qui est passé est le pointeur vers l'emplacement de l'objet. Ainsi, dans un premier temps, il est facile de comprendre s'il existe un attribut « nom » de « chen ».
Parce que obj est un paramètre de la fonction, sa signification réelle se trouve dans la fonction. Lorsque var
了一个obj
,后期,函数执行完,就会被销毁。可能你看了后面的执行环境和作用域好理解一点。然后,obj = new Object()
, la valeur de obj n'est pas le pointeur de l'objet personne d'origine.
Bien sûr, si vous remplacez la deuxième ligne de code par 'obj1', vous aurez l'effet de la déclaration globale que vous avez mentionnée. (Répondez à la question très sérieusement)
欧阳克2017-06-14 10:55:31
Ce que vous écrivez dans la fonction que vous définissez ainsi n'est qu'un paramètre formel, pas un paramètre réel, encore moins des paramètres globaux et locaux. . . . . . . . . . . . . .
淡淡烟草味2017-06-14 10:55:31
Après avoir lu les réponses de référence données par les internautes, j'y ai réfléchi un moment, et je comprends à peu près si c'est vrai ou pas, mais je pense que j'en suis assez proche !
Les paramètres de toutes les fonctions dans ECMAScript sont passés par valeur
Ainsi, lorsque l'objet personne est passé à setName() en tant que paramètre réel, le pointeur de l'objet personne est copié dans setName()
Supposons que le pointeur d'origine vers la personne l'objet est le numéro un, le pointeur après la copie est le numéro deux
Ces deux pointeurs pointent vers l'objet personne en même temps
Ainsi, lorsque obj.name="chen" est exécuté dans la fonction, un attribut name sera ajouté au objet personne selon le pointeur numéro deux
Mais lors de l'exécution de When obj=new Object();, le deuxième pointeur pointera vers un nouvel objet au lieu de l'objet personne d'origine
Ainsi, lorsque obj.name="long"; l'attribut name de l'objet personne ne sera pas modifié
console .log(person.name); renverra "chen"
et obj est un paramètre formel, pas un paramètre réel. Il n'y a pas de distinction globale ou locale. détruit après l'exécution de la fonction, c'est-à-dire qu'il n'y a plus de pointeur numéro deux. Il n'y a plus de pointeur vers l'attribut de nom "long".