2011-12-10 2 views

Répondre

11

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 ...

7

Il n'y a pas de problème avec techniquement. La fonction enregistrera le str qui est actuellement dans la portée (votre paramètre).

Pour des raisons évidentes, ceci n'est pas considéré comme une bonne idée. À tout le moins, cela rend le code illisible.

Questions connexes