suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Javascript-Bereichskette

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

Warum das Ergebnis Hallo ist, nicht Welt

阿神阿神2741 Tage vor543

Antworte allen(5)Ich werde antworten

  • 滿天的星座

    滿天的星座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,指定作用域。】
       }
    
    }

    Antwort
    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'
      }
    }

    Antwort
    0
  • 高洛峰

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

    因为你obj对象中写着的 str:"world",表示的是obj.str=“world”。这是是一个属性,不是一个变量。而你最后运行的obj.fun()里面弹出的是str变量,并不是属性(当然这个也是全局window的一个属性)。这么说你懂了吗。如果你alert this.str 或者obj.str都能得到"world"。

    Antwort
    0
  • ringa_lee

    ringa_lee2017-05-19 10:30:18

    变量 str 其实是 window 的属性,和 obj 对象的 str 属性是没有关系的。这个不涉及作用域链问题,你理解的情况应该是下面这种:

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

    这个例子中,函数 change 中先对 全局变量 str 重新赋值,要执行 alert(str) 时,就在自身的作用域链起点也就是自己的变量对象中寻找 str 这个变量,发现没有就接着往上一级寻找,找到了 str 变量,不过这时 str 已经被重新赋值为 world ,所以会弹出 world。

    Antwort
    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 !

    懂了木有?

    Antwort
    0
  • StornierenAntwort