cari

Rumah  >  Soal Jawab  >  teks badan

rantai skop javascript

var str="hello";
var obj={
   str:"world",
   fun:function(){
       alert(str);
       }
}
obj.fun(); //结果是hello

Kenapa hasilnya hello, bukan dunia

阿神阿神2858 hari yang lalu608

membalas semua(5)saya akan balas

  • 滿天的星座

    滿天的星座2017-05-19 10:30:18

    var str="hello";【这个str,obj对象里可以读取】
    var obj={
    str:"world";
    fun:function(){
    
       alert(str);【这个str指obj外部str是【window.str简写】,想要弹出"world"需要使用,this.str,指定作用域。】
       }
    
    }

    balas
    0
  • PHPz

    PHPz2017-05-19 10:30:18

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

    balas
    0
  • 高洛峰

    高洛峰2017-05-19 10:30:18

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

    balas
    0
  • ringa_lee

    ringa_lee2017-05-19 10:30:18

    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.

    balas
    0
  • PHP中文网

    PHP中文网2017-05-19 10:30:18

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

    Adakah anda faham?

    balas
    0
  • Batalbalas