javascript - js soalan ini
PHP中文网
PHP中文网 2017-05-19 10:22:14
0
5
426
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中文网

认证0级讲师

membalas semua(5)
世界只因有你

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.

世界只因有你

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

大家讲道理

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. 🎜
曾经蜡笔没有小新

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.

習慣沉默

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan