var foo = "window";
var obj = {
foo : "obj",
getFoo : function(){
return function(){
return this.foo;
};
}
};
var f = obj.getFoo();
console.log(f()); //结果:window
Pourquoi le résultat de la fenêtre d'exécution du code ci-dessus ?
obj.getFoo()
返回一个方程,赋值给了 f 。f 通过
f()
被调用,没有明确的调用者,所以 this 就是window
.Si vous voulez obtenir "obj", vous pouvez le faire
Parce que, en
f()
实际运行的地方,this
是window
,由于没有通过call
或者bind
改变上下文,所以输出的就是window
.Vous pouvez le remplacer comme suit :
ici
self
就是指向window
了,所以return self.foo
就是return window.foo
,也就是'window'
.En fait, la compréhension la plus simple est que obj.getFoo donne f, puis regarde où cette méthode s'exécute.
f() dans console.log(f()) est appelé indépendamment
1 Si la fonction appelante appartient à un objet, alors lorsque la fonction est appelée, l'interne this pointe vers l'objet.
2. Si la fonction est appelée indépendamment, alors celle-ci à l'intérieur de la fonction pointe vers indéfini.
Lecture recommandée http://www.jianshu.com/p/d647... J'espère que cela vous sera utile
Exécution de la fonction, ceci dans le corps de la fonction pointe vers l'appelant de la fonction
1. Dans le code suivant, l'appelant de la fonction getFoo est obj, donc ceci à l'intérieur de la fonction getFoo pointe vers l'objet obj
2. La fonction getFoo renvoie une fonction anonyme et l'affecte à la variable f, puis exécute la fonction f A ce moment, la variable f est montée sur la fenêtre, et ce. à l'intérieur de la fonction f pointe également vers la fenêtre