Почему x не определено при использовании объекта параметров - PullRequest
0 голосов
/ 23 февраля 2019

Почему x здесь не определено?Объект параметров определяет их, и затем x передается в качестве параметра функции foo ().

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

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

Ответы [ 6 ]

0 голосов
/ 23 февраля 2019

x не определено, поскольку вы не передаете его в качестве аргумента своей функции, и x также недоступен в родительских областях.

Вы должны объявить его в списке аргументов ваших функций.Вы также можете передать весь объект, как показано здесь функцией bar.Или вы можете также передать полный объект и деструктурировать в списке аргументов, чтобы получить доступ к его свойствам, как показано здесь функцией baz:

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 голосов
/ 23 февраля 2019

Хотя функции могут получать доступ к значениям из замыканий, x не определено в закрывающем замыкании для foo.Однако вы можете получить к нему доступ, используя options.x, так как параметры определены в закрытии

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

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

Вы также можете получить значения из аргумента, переданного в функцию

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

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

Или вы можете деструктурировать его из аргументов и получить к нему доступ

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

foo(options);
function foo({x}) {
  console.log(x);
}
console.log(options.y);
0 голосов
/ 23 февраля 2019

Потому что

  1. вы не прошли param в функции foo. Поэтому передайте параметр в функции function foo(param)
  2. А также xэто не переменная .its ключ объекта, поэтому вызовите option.x
  3. В противном случае он все еще не определен
  4. option.y работает. Потому что вы напрямую вызываете ключ объекта

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

foo(options);
function foo(param) {
  console.log(param.x);
}
console.log(options.y);
0 голосов
/ 23 февраля 2019

Потому что нет x доступного внутри foo().Вам нужен параметр. Вы можете использовать Распаковка полей из объектов, переданных как параметр функции .

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

foo(options);
function foo({x,y}) {
  console.log(x);
}
console.log(options.y);
0 голосов
/ 23 февраля 2019

Вы можете получить доступ, используя options из closure

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

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

или просто вы можете принять параметр в определении функции и получить к ним доступ.

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

foo(options);
function foo({x,y}) {
  console.log(x);
}
console.log(options.y);
0 голосов
/ 23 февраля 2019

вам нужно передать параметры в функцию foo ...

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

foo(options);
function foo(options) {
  console.log(options.x);
}
console.log(options.y);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...