chaîne de portée javascript
阿神
阿神 2017-05-19 10:28:18
0
5
537
var str="hello";
var obj={
   str:"world",
   fun:function(){
       alert(str);
       }
}
obj.fun(); //结果是hello

Pourquoi le résultat est bonjour, pas monde

阿神
阿神

闭关修行中......

répondre à tous(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'
  }
}
小葫芦

Parce que le str:"world" écrit dans votre objet obj signifie obj.str="world". Il s'agit d'une propriété, pas d'une variable. Ce qui apparaît dans le dernier obj.fun() que vous avez exécuté est la variable str, pas un attribut (bien sûr, c'est aussi un attribut de la fenêtre globale). Alors tu comprends ? Si vous alertez this.str ou obj.str, vous pouvez obtenir "world".

左手右手慢动作

La variable str est en fait un attribut de window et n'a rien à voir avec l'attribut str de l'objet obj. Cela n'implique pas de problèmes de chaîne de portée. Ce que vous comprenez devrait être le suivant :

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

Dans cet exemple, la variable globale str est d'abord réaffectée lors du changement de fonction. Lorsque alert(str) doit être exécuté, la variable str est recherchée au point de départ de sa propre chaîne de portée, c'est-à-dire sa propre chaîne de portée. propre objet variable. S'il n'est pas trouvé, recherchez ensuite un niveau plus haut et trouvez la variable str, mais à ce moment, str a été réaffecté au monde, donc le monde apparaîtra.

洪涛
var str="hello";

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

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

Comprends-tu ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal