为什么使用options对象时x未定义

时间:2019-02-23 06:21:31

标签: javascript object parameters undefined

为什么x在这里未定义? options对象定义它们,然后将x作为参数传递给函数foo()。

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

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

6 个答案:

答案 0 :(得分:3)

虽然函数可以访问闭包中的值,但在将闭包封闭到foo中未定义x。但是,由于选项是在闭包中定义的,因此您可以使用recyclerView来访问它

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);

答案 1 :(得分:2)

您需要在foo函数中传递选项参数...

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

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

答案 2 :(得分:1)

因为x中没有foo()可用。您需要一个参数。您可以使用Unpacking fields from objects passed as function parameter

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

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

答案 3 :(得分:0)

您可以使用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);

答案 4 :(得分:0)

因为

  1. 您没有在foo函数中传递param。因此,在函数function foo(param)中传递了参数
  2. 而且x也不是变量。它的对象键叫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);

答案 5 :(得分:0)

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);