国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Teka-teki tentang ini dalam JavaScript
代言
代言 2017-06-26 10:52:59
0
7
1008

Saya melihat banyak maklumat mengatakan bahawa objek mana yang memanggil fungsi ini, ini dalam fungsi ini menunjuk ke objek ini.
Dalam contoh berikut, fungsi foo dipanggil melalui pernyataan foo(). Bukankah Window.foo() dipanggil oleh objek global?
Sila beri nasihat, terima kasih!

var x = 10;
var obj = {
  x: 20,
  f: function () {
     var foo = function (){
         console.log(this.x);
     }
     foo();
  }
};
obj.f(); //10
代言
代言

membalas semua(7)
給我你的懷抱

Terdapat masalah dengan apa yang dikatakan di tingkat atas Foo bukan pembolehubah global Cara mudah untuk menilai (mod tidak ketat) ialah:
1 Apabila fungsi tidak diberikan objek unggul, ini menunjuk ke tetingkap
2 . Apabila fungsi ditetapkan Apabila ia berkaitan dengan objek superior, ini hanya menunjuk kepada objek superior (induk) yang paling hampir
seperti foo.fn.o(), ini dalam o menunjuk ke fn

小葫蘆

Beginilah rupanya, saya tulis di ruangan komen

var x = 10;
var obj = {
  x: 20,
  f: function () {
     var foo = function (){
         console.log(this.x);//你這是把函數(shù)賦值給一個 foo的變量。此時的 foo 是全局的,所以下面調(diào)用 foo()這里是10嘛
     }
     foo();
  }
};
obj.f(); // 這個調(diào)用 f 函數(shù),因?yàn)?f(),并沒有返回出去什么,所以這里是 undefined
代言

Untuk 內(nèi)部函數(shù),即聲明在另一個函數(shù)體內(nèi)的函數(shù),都將會綁定到全局對象上,這是JavaScript的設(shè)計(jì)缺陷, kaedah reka bentuk yang betul ialah fungsi dalaman ini harus diikat pada objek yang sepadan dengan fungsi luarnya, yang membawa kepada masalah di atas.

Untuk mengelakkan kecacatan reka bentuk ini, anda boleh menggunakan 變量替代的方法,約定俗成,可以使用selfthat, kodnya adalah seperti berikut:

var x = 10;
var obj = {
  x: 20,
  f: function () {
     var self = this;
     var foo = function (){
         console.log(self.x);
     }
     foo();
  }
};
obj.f();
洪濤

Pertama sekali, mari kita fahami satu perkara:
1: tetingkap juga merupakan objek, ia adalah objek istimewa, ia mewakili seluruh dunia. Apabila anda memanggil fungsi dengan cara berikut:
function foo(){....}
foo();//
Kaedah panggilan ini dalam baris kedua (tiada objek yang ditentukan oleh anda di hadapan fungsi) , Kami memanggilnya 'panggilan global'. Malah, ia bersamaan dengan window.foo(). Jadi adakah anda melihatnya? Memanggil fungsi secara global sebenarnya adalah kes khas untuk memanggil fungsi pada objek, kerana objek pada masa ini ialah tetingkap.
2: Jadi mengapa kod di atas memanggil foo() secara global dan bukannya pada obj? Saya akan menukar kod dan biarkan ia mengeluarkan 20:

var x = 10;
var obj = {
  x: 20,
  f: function () {
     console.log(this.x);
  }
};
obj.f();//20

Bandingkan dua keping kod dan cari perbezaannya.

某草草
var x = 10;
var obj = {
  x: 20,
  f: function () {
     console.log(this.x);  // 20
     var foo = function (){
         // 這里函數(shù)的作用域是window
         console.log(this.x);
     }
     foo();
  }
};
obj.f(); //10
var x = 10;
var obj = {
  x: 20,
  f: function () {
     let that = this;
     var foo = function (){
         // 這里形成了閉包
         console.log(that.x);
     }
     foo();
  }
};
obj.f(); //20
曾經(jīng)蠟筆沒有小新

Anda boleh menulis semula kod seperti ini:

var x = 10;
var obj = {
  x: 20,
  f: function () {
     var foo = function (){
         console.log(this.x);
     }
     foo.call(null) // 等價于foo.call(window)
  }
};
obj.f.call(obj); //10  結(jié)果不變

Melalui contoh di atas, anda boleh memahami bahawa apabila memanggil fungsi, penghurai JavaScript dipanggil dalam bentuk panggilan atau memohon. Dengan cara ini, nyatakan nilai untuk ini dalam fungsi. Parameter pertama bagi kedua-dua kaedah ini ialah nilai dalaman kaedah foo ini apabila ia dipanggil Jika parameter pertama kaedah panggilan adalah batal atau tidak ditentukan, objek global akan digunakan sebagai parameter pertama secara lalai (anda boleh mencuba. Cuba foo.call(), foo.call(null), foo.call(undefined))

女神的閨蜜愛上我

Fungsi dalam fungsi, penunjuk ini hilang

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