Maison > Questions et réponses > le corps du texte
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
PHPz2017-05-19 10:41:36
Un concept que l'interrogateur n'a pas compris est le problème de la transmission des paramètres de fonction.
var g = 1;
function fn(a){a=2;}
fn(g);
g//1
//我是分割线
var g = {a:1};
function fn(b){b.a=2;}
fn(g);
g//{a:2}
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.
var g;
function fn(){
g = 1;
}
fn();
g//1
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.
習慣沉默2017-05-19 10:41:36
Le passage des paramètres de fonction Javascript consiste uniquement à « transmettre des valeurs ».
Une façon plus raisonnable de l'écrire est
var g;
function fn() {
return 33
}
g = fn();
Manière déraisonnable d'écrire
var g;
function fn() {
g = 33;
}
fn();
La troisième raison pour laquelle cette dernière est déraisonnable est que le degré de couplage est trop élevé.
大家讲道理2017-05-19 10:41:36
var g;
function fn(){
g = '32';
}
fn();
Cela peut faire ce dont vous avez besoin, mais vous en voulez probablement un universel, n'est-ce pas ?
你可以选择这样:
var g;
function fn(){
return '32';
}
g = fn();