Cette question n'est pas spécifique à jQuery, mais à JavaScript en général. Le problème principal est de savoir comment "canaliser" une variable dans des fonctions intégrées. Voici l'exemple :
var abc = 1; // we want to use this variable in embedded functions
function xyz(){
console.log(abc); // it is available here!
function qwe(){
console.log(abc); // it is available here too!
}
...
};
Cette technique repose sur l'utilisation d'une fermeture. Mais elle ne fonctionne pas avec this
parce que this
est une pseudo-variable qui peut changer dynamiquement d'une portée à l'autre :
// we want to use "this" variable in embedded functions
function xyz(){
// "this" is different here!
console.log(this); // not what we wanted!
function qwe(){
// "this" is different here too!
console.log(this); // not what we wanted!
}
...
};
Que pouvons-nous faire ? L'assigner à une variable et l'utiliser par le biais de l'alias :
var abc = this; // we want to use this variable in embedded functions
function xyz(){
// "this" is different here! --- but we don't care!
console.log(abc); // now it is the right object!
function qwe(){
// "this" is different here too! --- but we don't care!
console.log(abc); // it is the right object here too!
}
...
};
this
n'est pas unique à cet égard : arguments
est l'autre pseudo-variable qui doit être traitée de la même manière - par aliasing.
17 votes
Vous devez éviter
self
car il existe unwindow.self
et vous pourriez finir par l'utiliser accidentellement si vous oubliez de déclarer votre propre objetself
var (par exemple en déplaçant du code). Cela peut être gênant à repérer/déboguer. Il est préférable d'utiliser quelque chose comme_this
.5 votes
Connexes : Que signifie var that = this ; en javascript ?
3 votes
A partir de la Tutoriel JavaScript : "La valeur de
this
est dynamique en JavaScript. Elle est déterminée lorsque la fonction est appelé et non lorsqu'elle est déclarée".1 votes
Duplicata possible de : Qu'est-ce qui sous-tend cet idiome JavaScript : var self = this ?
0 votes
En effet, dans le champ d'application global
self === this
. Par conséquent,self
dans les contextes locaux est logique et suit le modèle.0 votes
Une excellente explication sur ce comportement mystérieux basé sur le contexte aquí