Passer des paramètres à setTimeout fonction de rappel
J'ai quelques JS code comme ci-dessous;
var x = self.someAJAXResponseJSON; //x has some object value here
setTimeout(function(x){
console.log("setTimeout ... : " + x); //But x is undefined here
}, 1000);
Si je veux passer "x" pour le setTimeout fonction de rappel. Mais je suis "x" comme indéfini à l'intérieur de la setTimeout.
Ce que je fais mal ?
Mis à JOUR
Toute idée de correctif pour le problème similaire, à l'aide de DOJO JS
setTimeout(dojo.hitch(this, function(){
this.executeSomeFunction(x); //what shud be this
console.log("setTimeout ... : " + x); //But x is undefined here
}), 1000);
si
eh bien, je pense que le but dans ce cas doit être comme la création de plusieurs fonctions différentes x valeurs. Pouvez-vous expliquer cela un peu plus d' @testndtv?
var x
est défini plus haut, n'est-ce pas possible - > setTimeout(function(){ console.log("setTimeout ... : " + x); }, 1000);
. Retrait x
de callback
et de l'affecter directement?eh bien, je pense que le but dans ce cas doit être comme la création de plusieurs fonctions différentes x valeurs. Pouvez-vous expliquer cela un peu plus d' @testndtv?
OriginalL'auteur testndtv | 2015-09-01
Vous devez vous connecter pour publier un commentaire.
Sinon, vous pouvez le faire sans la création d'un système de fermeture.
Mais notez qu'il ne fonctionne pas
IE < 10
selon le MDN.OriginalL'auteur Maciej Krawczyk
Quand
setTimeout
appelle le rappel, il ne passe pas tous les arguments (par défaut), c'est l'argumentx
est pas défini lorsque la fonction de rappel est appelée.Si vous supprimer le paramètre de
x
,x
dans le corps de la fonction ne pas se référer au paramètre non défini, mais au lieu de la variable que vous avez défini en dehors de l'appel àsetTimeout()
.Par ailleurs, si les doit être un paramètre, vous pouvez le passer en argument à
setTimeout
(faites-vous une faveur et de le nommer différemment, tout de même):OriginalL'auteur Purag
Dans votre code,
console.log(x)
se réfère à lax
paramètre de la fonction de rappel.Juste omettre de signature de fonction, et vous serez amende:
OriginalL'auteur moonwave99
A couru dans tout cela moi-même et regarda le Nœud docs, les arguments passés à la fonction venir comme un 3ème(ou plusieurs) paramètre à l'appel de setTimeout donc...
A fonctionné pour moi.
OriginalL'auteur myfavoritenoisemaker
C'est parce que la fonction est appelée sans passer aucun argument: alors x est pas défini.
Vous devriez envelopper dans une fermeture si vous êtes prêt à appeler avec des paramètres différents pour x:
x
défini, ce qui n'est pas défini par défaut.merci @Purag, j'ai édité ma réponse
Vous n'avez pas aussi un nom différent. Elle n'aura aucun effet.
C'était juste pour faire mieux comprendre: je suis en supposant qu'il n'a pas une compréhension claire de la façon dont les étendues de travail.
Je préfère faire
setTimeout((function(x){ ... }).bind(null, x), 1000)
alors : ))OriginalL'auteur pietro909
méthode setTimeout est conçu pour prendre de la fonction ou de l'extrait de code que son premier argument, mais dans votre cas vous avez pris une fonction anonyme avec le paramètre x et qui est appelé sans prendre aucun argument, de sorte qu'il montre n'est pas défini, car il n'y a pas de béton de la fonction définie que prend x. Ce que vous pouvez faire est que vous pouvez tout d'abord définir la fonction que vous voulez l'appeler, et puis il suffit de l'appeler dans la méthode setTimeout. Voir l'extrait de code suivant:
OriginalL'auteur Rahul Singh