为什么x
在这里未定义? options对象定义它们,然后将x
作为参数传递给函数foo()。
var options = {x:4,y:3};
foo(options);
function foo() {
console.log(x);
}
console.log(options.y);
答案 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)
因为
param
。因此,在函数function foo(param)
中传递了参数x
也不是变量。它的对象键叫option.x
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);