javascript - js cette question
PHP中文网
PHP中文网 2017-05-19 10:22:14
0
5
435
var foo = {
  bar: function () {
    alert(this);
  }
};
 
foo.bar(); // Reference, OK => foo      (1)
(foo.bar)(); // Reference, OK => foo    (2)
 
(foo.bar = foo.bar)(); // global?       (3)

Pouvez-vous expliquer pourquoi les résultats de (2) et (3) sont différents ?

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(5)
世界只因有你

var temp =foo.bar=foo.bar;
temp();
Tâche continue
Compris ?
Parce que ceci n'est pas appelé comme une méthode objet mais comme un appel de fonction, cela pointe donc vers undéfini, et en mode non strict, undéfini pointe vers le monde global.

世界只因有你

Ceci est défini par le contexte lors de l'exécution, donc naturellement celui qui appelle ceci est qui

L'appel dans (2) est foo.bar, alors ceci a trouvé l'objet foo ;

Lors de l'appel de (3), il y a d'abord une affectation, et foo.bar est affecté à foo.bar, de sorte qu'il devienne une variable globale. Cette fonction est appelée globalement, donc bien sûr elle pointe vers undefined (mode non strict dans l'environnement du navigateur).

大家讲道理

À en juger par les commentaires du code, la personne qui pose la question peut tout simplement ne pas comprendre (3). Voici l'explication :
foo.bar = foo.barL'expression renvoie une fonction anonyme, c'est-à-dire . function( ) {alerte(this);}. foo.bar = foo.bar表达式返回的是匿名函数,即function() {alert(this);}
所以再调用相当于该匿名函数的自调用,即(function() {alert(this);})();

补充下:
(foo.bar)表达式返回小括号里的,即foo.bar。然后foo.bar作为函数被调用,即foo.bar()
而赋值表达式是将右侧的即foo对象的barL'appel est donc équivalent à l'auto-appel de la fonction anonyme, c'est-à-dire (function() {alert(this);})();.

🎜Ajout : 🎜(foo.bar)L'expression renvoie ce qui est entre parenthèses, c'est-à-dire foo.bar. Ensuite, foo.bar est appelé en tant que fonction, c'est-à-dire foo.bar(). 🎜L'expression d'affectation attribue la valeur stockée dans la bar de l'objet foo du côté droit au côté gauche et la renvoie. 🎜
曾经蜡笔没有小新

var foo = {
barre : fonction() {

alert(this);

}
};
(foo.bar)(); // Référence, OK => foo (2)
Remarque : (foo.bar)() ici est équivalent au premier foo.bar(), qui exécute la méthode bar dans l'objet foo. Cela pointe vers l'objet foo
(foo.bar = foo.bar)( // global?
Remarque : Regardez d'abord foo.bar = foo.bar, foo.bar est la fonction () {alert(this);} assignée à foo.bar,
Puis (foo.bar = foo. bar ) est égal à (function(){alert(this)}), alors l'ajout de l'extérieur () est une fonction instantanée :
(function(){alert(this)})(); est la fenêtre globale.

習慣沉默

L'expression d'affectation renvoie le global =》window
foo.bar se voit attribuer une fonction(){alert(this)} qui pointe vers la fenêtre globalement

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal