Q1 Pourquoi la console en a-t-elle sorti deux sans différence à la fin ?
var a = {
b: {
m: function() {
console.log(this.p);
},
p: 'Hello'
}
};
var hello = a.b.m;
hello()
Q2 donne l'impression qu'il y en a un de plus sans différence ici
//代码
var a = {
b: {
m: function() {
console.log(this.p);
},
p: 'Hello'
}
};
var hello = a.b;
hello.m();
Supplément :
Source du problème :
Ce mot-clé dans le standard JS de Ruan Yifeng
Le code ci-dessus est dans le lien, 2. (3) Méthode objet, le dernier paragraphe
Répondre automatiquement, résumant l'aide précédente :
Q1
Le premier n'est pas défini, car hello pointe vers une méthode, qui peut être considérée comme functionName, donc c'est window
this. p; / /window.p
//Déclarez d'abord un window.p, aucune valeur n'est attribuée, la valeur n'est pas modifiéethis.p; //window.p
//首先声明一个window.p,未赋值,值是undifined关键是多了一个undifined!
第二个undefined,前面有个箭头,
在 m 函数里加一个 return 'test',
//"test"
所以,这个箭头可以看做return后面的值,这里m函数没有return,没有返回值就是undifined
总结:前面这个箭头,是控制台独有的,命令行调试时没有
控制台先是执行函数,然后是,输出函数的执行结果(比如再用来 给别的赋值)
Q2
La clé c'est qu'il y en a un de plus indiffé ! #🎜🎜#Le deuxième non défini a une flèche devant, #🎜🎜#Ajouter un retour 'test' dans la fonction m,第一个undefined,因为hello指向了一个对象,可以看做b,所以
this.p; //b.p
//"test"
#🎜🎜#Donc, cette flèche peut être vu Faites la valeur après le retour Il n'y a pas de retour dans la fonction m ici S'il n'y a pas de valeur de retour, elle est inchangée#🎜🎜##🎜🎜#Résumé#🎜🎜# : La flèche. devant est unique à la console et à la ligne de commande Lors du débogage, il n'y a pas de #🎜🎜#La console exécute d'abord la fonction, puis affiche le résultat de l'exécution de la fonction (par exemple, elle peut être utilisée pour attribuer des valeurs à d'autres choses)#🎜🎜# #🎜🎜##🎜🎜#Q2#🎜🎜##🎜🎜#Le premier n'est pas défini, car hello pointe vers un objet et peut être considéré comme b, doncthis.p //b.p
; ># 🎜🎜#est la valeur de retour de la dernière instruction. Pouvez-vous essayer d'ajouter un "test" de retour à la fonction m ?
Personnellement, je pense que le premier non défini est dû au fait que la fonction n'a pas de valeur de retour, et le second non défini peut être dû au débogage du navigateur. Pouvez-vous essayer d'utiliser la ligne de commande pour déboguer et voir si le deuxième non défini apparaîtra.
Utilisez-vous la console du navigateur Chrome ? Le second non défini est inhérent et n'a rien à voir avec votre code.
Entrez var a = 1;
Appuyez sur Entrée et il y a aussi undéfini.
Je pense que c'est vous. Le pointeur this de cette méthode a changé la définition de la méthode dans l'objet a en une variable sous window. Pour le moment, cela pointe vers window et il n'y a pas de définition de p sous window. Vous pouvez utiliser var hello Vous comprendrez si vous déclarez un var P avant
1.hello() n'a pas de valeur de retour
2.console.log() cette fonction n'a pas de valeur de retour
Questions supplémentaires
undefined
是js语句本身的值,剩下的就是this
.