-2
votes

Pourquoi x est indéfini lors de l'utilisation de l'objet Options

pourquoi x code> non défini ici? L'objet Options les définit, puis x code> est transmis sous forme de paramètre à la fonction FOO ().

p>

var options = {x:4,y:3};

foo(options);
function foo() {
  console.log(x);
}
console.log(options.y);


0 commentaires

6 Réponses :


2
votes

Vous devez passer des options paramètres dans FOO Fonction ...

p>

var options = {x:4,y:3};

foo(options);
function foo(options) {
  console.log(options.x);
}
console.log(options.y);


3 commentaires

Merci! Lorsque je teste votre code, cela fonctionne même si je n'inclut pas les options à l'intérieur de la fonction foo (); . Y a-t-il une raison pour laquelle vous mettez options à l'intérieur de l'appel de la fonction foo (options); et la fonction fonction foo (options) {} ?


En raison de la fermeture, vous avez accès à Options et vous y accédez, mais vous n'avez rien de nom x en fermeture afin que vous obteniez une erreur X n'est pas défini


En JavaScript, il y a un concept appeler des fonctions pures .. Essayez la fonction d'écriture de cette façon. Si vous écrivez de cette façon, vous pouvez avoir un comportement plus prévisible ...



0
votes

Vous pouvez accéder à l'aide des options code> à partir de code> Fermeture code>

p>

var options = {x:4,y:3};

foo(options);
function foo({x,y}) {
  console.log(x);
}
console.log(options.y);


0 commentaires

1
votes

car il n'y a pas de x code> disponible dans foo () code>. Vous avez besoin d'un paramètre.Vous pouvez utiliser Déballage Les champs des objets sont passés en tant que paramètre de fonction .

var options = {x:4,y:3};

foo(options);
function foo({x,y}) {
  console.log(x);
}
console.log(options.y);


0 commentaires

0
votes

parce que strong>

  1. Vous ne pouvez pas passer param code> dans FOO fonction.SO Pass Pass Param avec fonction Fonction FOO (param) code> li> LI>
  2. et aussi x code> n'est pas une variable.
  3. sinon c'est toujours indéfini un li>
  4. option.y code> fonctionne.parce que vous êtes directement appeler la clé d'objet li> ol>

    p>

    var options = {x:4,y:3};
    
    foo(options);
    function foo(param) {
      console.log(param.x);
    }
    console.log(options.y);


0 commentaires

2
votes

Bien que les fonctions puissent accéder aux valeurs des fermetures, X n'est pas défini ni la fermeture enfermante à FOO. Vous pouvez cependant y accéder à l'aide de options.x code> car les options sont définies dans la fermeture

p>

var options = {x:4,y:3};

foo(options);
function foo({x}) {
  console.log(x);
}
console.log(options.y);


1 commentaires

Pour la fermeture. +1



0
votes

x code> est indéfini car vous ne le transmettez pas comme une dispute à votre fonction, et x n'est pas disponible dans les champs parents non plus.

Vous devez le déclarer dans la liste des arguments de votre les fonctions. Vous pouvez également transmettre l'objet entier, car la fonction code> montre ici. Ou vous pouvez également transmettre un objet complet et destructures dans la liste d'arguments pour accéder à ses propriétés, comme indiqué par la fonction Baz code> ici: p>

p>

const options = { x: 4, y: 3 };

function foo(x) {
  console.log(x);
}

function bar(arg) {
  console.log(arg.x, arg.y);
}

function baz({ x, y }) {
  console.log(x, y);
}

foo(options.x);
foo(options.y);
bar(options);
baz(options);


0 commentaires