var str="hello";
var obj={
str:"world",
fun:function(){
alert(str);
}
}
obj.fun(); //結果是hello
Pourquoi le résultat est bonjour, pas monde
閉關修行中......
var str="hello";【這個str,obj對象里可以讀取】
var obj={
str:"world";
fun:function(){
alert(str);【這個str指obj外部str是【window.str簡寫】,想要彈出"world"需要使用,this.str,指定作用域。】
}
}
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 ?