Maison > Questions et réponses > le corps du texte
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
漂亮男人2017-05-19 10:34:47
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 windowthis. 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
第一个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, donc this.p //b.p
# 🎜🎜#高洛峰2017-05-19 10:34:47
est la valeur de retour de la dernière instruction. Pouvez-vous essayer d'ajouter un "test" de retour à la fonction m ?
黄舟2017-05-19 10:34:47
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.
迷茫2017-05-19 10:34:47
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.
为情所困2017-05-19 10:34:47
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
黄舟2017-05-19 10:34:47
1.hello() n'a pas de valeur de retour
2.console.log() cette fonction n'a pas de valeur de retour