Il s'agit simplement d'une situation de portée standard - le fait qu'il s'agisse d'une expression de fonction anonyme passée en paramètre à une autre fonction n'a pas d'importance. Notez que dans votre performAction()
fonction (que vous ne montrez pas) il n'aura aucun accès au str
qui est le paramètre de la fonction de rappel - si performAction()
références str
il obtiendra la variable globale «internet» (ou sa propre locale str
si défini). Les paramètres d'une fonction sont, pour l'objectif, les mêmes que les variables locales de cette fonction, ce qui signifie qu'elle masque d'autres variables du même nom de l'étendue externe - mais des variables avec des noms différents peuvent toujours être accédées même si elles sont définies portée.
où il pourrait porter à confusion est si vous faites quelque chose comme ceci:
var str = "internet";
(function(str) {
console.log(str); // "internet"
str = "local param";
console.log(str); // "local param"
})(str);
console.log(str); // "internet"
Dans ce cas, j'ai une fonction avec un paramètre appelé str
mais quand je l'appelle je passe dans un autre str
. Notez que changer str
dans cette fonction change seulement le str
local, pas le global. Ce sont deux variables différentes ...
Non - n'oubliez pas que ce n'est pas la même variable. –
Merci beaucoup! –