Comme ci-dessus, g ne peut pas se voir attribuer une nouvelle valeur. Je souhaite écrire une fonction fn qui peut attribuer arbitrairement des valeurs à des variables externes
Les exigences réelles sont comme ci-dessus, je souhaite attribuer les variables instanciées à l'extérieur
Un concept que l'interrogateur n'a pas compris est le problème de la transmission des paramètres de fonction.
Lorsque des variables externes sont transmises à des fonctions en tant que paramètres, vous devez comprendre deux situations : l'une est le type de données de base et l'autre est l'objet.
Lorsque les paramètres sont des types de données de base, les paramètres de la fonction sont transmis par valeur, c'est-à-dire que la valeur est copiée dans le paramètre. La façon dont la fonction modifie la valeur du paramètre n'est qu'une modification de la copie du paramètre réel, qui. n'affectera pas l'ontologie. Comme indiqué dans votre capture d'écran.
Lorsque le paramètre est un objet, je pense en fait qu'il s'agit d'un transfert de valeur, mais ce qui est transmis est la valeur de l'adresse de référence de l'objet. La fonction indexe en interne l'adresse de l'objet de référence sur l'objet de données réel, puis modifie les attributs dans. l'objet. C'est une situation qui affectera le monde extérieur.
D'une manière générale, si vous souhaitez attribuer une valeur à une variable externe. Autant ne pas transmettre les variables en paramètres, mais effectuer le traitement directement dans le corps de la fonction.
Selon les règles de recherche des variables de fonction, recherchez d'abord si la variable a g dans le corps d'exécution actuel. Si elle ne la trouve pas dans la couche externe, cela signifie que la variable n'a pas été définie ou déclarée.
Le passage des paramètres de fonction Javascript consiste uniquement à « transmettre des valeurs ».
Une façon plus raisonnable de l'écrire est
Manière déraisonnable d'écrire
La troisième raison pour laquelle cette dernière est déraisonnable est que le degré de couplage est trop élevé.
Cela peut faire ce dont vous avez besoin, mais vous en voulez probablement un universel, n'est-ce pas ?
var g;
function fn(valeur){
g = valeur;
}
fn(1);
g//1#🎜🎜 #