为什么在使用选项对象时 x 未定义

Why is x undefined when using options object

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

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

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

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

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

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

您可以使用来自 closure

options 访问

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

因为foo()里面没有x可用。你需要有一个 parameter.You 才能使用 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);

因为

  1. 你没有在 foo 中传递 param function.so 在函数中传递参数 function foo(param)
  2. 而且 x 不是变量。它的对象键所以调用 option.x
  3. 否则还是未定义
  4. option.y是works.Because你是直接调用对象key

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

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

虽然函数可以从闭包中访问值,但 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);

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