cari

Rumah  >  Soal Jawab  >  teks badan

javascript - js soalan ini

var foo = {
  bar: function () {
    alert(this);
  }
};
 
foo.bar(); // Reference, OK => foo      (1)
(foo.bar)(); // Reference, OK => foo    (2)
 
(foo.bar = foo.bar)(); // global?       (3)

Bolehkah anda terangkan mengapa keputusan (2) dan (3) berbeza?

PHP中文网PHP中文网2821 hari yang lalu437

membalas semua(5)saya akan balas

  • 世界只因有你

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

    var temp =foo.bar=foo.bar;
    temp();
    Tugasan berterusan
    Faham?
    Oleh kerana ini tidak dipanggil sebagai kaedah objek tetapi sebagai panggilan fungsi, jadi ini menunjukkan kepada undefined, dan dalam mod tidak ketat, undefined menunjuk ke dunia global.

    balas
    0
  • 世界只因有你

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

    Ini ditakrifkan oleh konteks semasa pelaksanaan, jadi secara semulajadi sesiapa yang memanggil ini adalah siapa

    Panggilan dalam (2) ialah foo.bar, maka ini telah menemui objek foo;

    Apabila memanggil (3), terdapat tugasan dahulu dan foo.bar ditetapkan kepada foo.bar, supaya ia menjadi pembolehubah global. Fungsi ini dipanggil secara global, jadi sudah tentu ia menunjukkan kepada undefined (mod tidak ketat dalam persekitaran penyemak imbas).

    balas
    0
  • 大家讲道理

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

    Berdasarkan komen kod, penyoal mungkin tidak faham (3) Berikut ialah penjelasannya:
    foo.bar = foo.barUngkapan mengembalikan fungsi tanpa nama, iaitu function( ) {alert(this);}. foo.bar = foo.bar表达式返回的是匿名函数,即function() {alert(this);}
    所以再调用相当于该匿名函数的自调用,即(function() {alert(this);})();

    补充下:
    (foo.bar)表达式返回小括号里的,即foo.bar。然后foo.bar作为函数被调用,即foo.bar()
    而赋值表达式是将右侧的即foo对象的barJadi panggilan itu bersamaan dengan panggilan kendiri bagi fungsi tanpa nama, iaitu, (function() {alert(this);})();.

    🎜Tambahan: 🎜(foo.bar)Ungkapan mengembalikan apa yang ada dalam kurungan, iaitu, foo.bar. Kemudian foo.bar dipanggil sebagai fungsi, iaitu foo.bar(). 🎜Ungkapan tugasan memberikan nilai yang disimpan dalam bar objek foo di sebelah kanan ke sebelah kiri dan mengembalikannya. 🎜

    balas
    0
  • 曾经蜡笔没有小新

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

    var foo = {
    bar: function () {

    alert(this);

    }
    };
    (foo.bar)(); // Rujukan, OK => foo (2)
    Nota: (foo.bar)() di sini Ia adalah bersamaan dengan foo.bar(), yang melaksanakan kaedah bar dalam objek foo Ini menunjuk ke objek foo
    (foo.bar = foo.bar)();
    Nota: Pertama lihat foo.bar = foo.bar, foo.bar ialah fungsi () {alert(this);} ditugaskan kepada foo.bar,
    Then (foo.bar = foo. bar ) adalah sama dengan (function(){alert(this)}), kemudian menambah outer () ialah fungsi segera:
    (function(){alert(this)})(); ialah tingkap global.

    balas
    0
  • 習慣沉默

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

    Ungkapan tugasan mengembalikan global =》window
    foo.bar is assigned function(){alert(this)} this point to window globally

    balas
    0
  • Batalbalas