rantai skop javascript
阿神
阿神 2017-05-19 10:28:18
0
5
540
var str="hello";
var obj={
   str:"world",
   fun:function(){
       alert(str);
       }
}
obj.fun(); //结果是hello

Kenapa hasilnya hello, bukan dunia

阿神
阿神

闭关修行中......

membalas semua(5)
滿天的星座
var str="hello";【这个str,obj对象里可以读取】
var obj={
str:"world";
fun:function(){

   alert(str);【这个str指obj外部str是【window.str简写】,想要弹出"world"需要使用,this.str,指定作用域。】
   }

}
PHPzhong
var str="hello";
var obj={
str:"world",
fun:function(){
   alert(str) //window.str => 'hello'
   alert(this.str) // obj.str => 'world'
  }
}
小葫芦

Kerana str:"world" yang ditulis dalam objek obj anda bermaksud obj.str="world". Ini adalah harta, bukan pembolehubah. Perkara yang muncul dalam obj.fun() terakhir yang anda jalankan ialah pembolehubah str, bukan atribut (sudah tentu ini juga merupakan atribut tetingkap global). Jadi awak faham? Jika anda memberi amaran this.str atau obj.str anda boleh mendapatkan "dunia".

左手右手慢动作

Str pembolehubah sebenarnya adalah atribut tetingkap dan tiada kaitan dengan atribut str objek obj. Ini tidak melibatkan isu rantaian skop Perkara yang anda faham hendaklah seperti berikut:

var str="hello";
function change(){
    str="world";
    alert(str)
}
change();

Dalam contoh ini, pembolehubah global mula-mula ditetapkan semula dalam perubahan fungsi Apabila anda ingin melaksanakan amaran(str), anda mencari pembolehubah str pada titik permulaan rantai skop anda sendiri, iaitu, dalam pembolehubah anda sendiri. objek. Jika anda mendapati ia tidak ditemui, teruskan carian Tahap 1 menemui pembolehubah str, tetapi pada masa ini str telah ditetapkan semula ke dunia, jadi dunia akan muncul.

洪涛
var str="hello";

var obj={
str:"world",
fun:function(str){
   console.log(window.str,this.str,str);
  }
}

obj.fun('!') //hello world !

Adakah anda faham?

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