recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - js cette question

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中文网2857 Il y a quelques jours452

répondre à tous(5)je répondrai

  • 世界只因有你

    世界只因有你2017-05-19 10:24:14

    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.

    répondre
    0
  • 世界只因有你

    世界只因有你2017-05-19 10:24:14

    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).

    répondre
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:24:14

    À 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. 🎜

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:24:14

    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.

    répondre
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:24:14

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

    répondre
    0
  • Annulerrépondre