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

Javascript 为什么在使用选项对象时x未定义,javascript,object,parameters,undefined,Javascript,Object,Parameters,Undefined,为什么这里没有定义x?options对象定义它们,然后将x作为参数传递给函数foo() var选项={x:4,y:3}; foo(期权); 函数foo(){ 控制台日志(x); } console.log(options.y)您需要在foo函数中传递选项参数 var选项={x:4,y:3}; foo(期权); 函数foo(选项){ console.log(options.x); } console.log(options.y)您可以使用选项从关闭 var选项={x:4,y:3}; foo(

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

var选项={x:4,y:3};
foo(期权);
函数foo(){
控制台日志(x);
}

console.log(options.y)您需要在foo函数中传递选项参数

var选项={x:4,y:3};
foo(期权);
函数foo(选项){
console.log(options.x);
}

console.log(options.y)您可以使用
选项
关闭

var选项={x:4,y:3};
foo(期权);
函数foo(){
console.log(options.x);
}

console.log(options.y)foo()
中没有可用的
x
。您需要有一个参数。您可以使用。
var选项={x:4,y:3};
foo(期权);
函数foo({x,y}){
控制台日志(x);
}

console.log(options.y)因为

  • 您不能在foo函数中传递
    param
    。因此,请在函数中传递param
    函数foo(param)
  • 而且
    x
    不是变量。其对象键因此调用
    option.x
  • 否则它仍然是未定义的
  • option.y
    有效。因为您直接调用对象键
  • var选项={x:4,y:3};
    foo(期权);
    函数foo(param){
    console.log(param.x);
    }
    
    console.log(options.y)虽然函数可以访问闭包中的值,但在foo的封闭闭包中没有定义x。但是,您可以使用
    options.x
    访问它,因为选项是在闭包中定义的

    var选项={x:4,y:3};
    foo(期权);
    函数foo(){
    console.log(options.x);
    }
    
    console.log(options.y)
    x
    未定义,因为您没有将其作为参数传递给函数,并且x在父作用域中也不可用

    您必须在函数的参数列表中声明它。您还可以传递整个对象,如函数
    bar
    所示。或者您也可以在参数列表中传递完整对象和destructure以访问其属性,如函数
    baz
    所示:

    constoptions={x:4,y:3};
    函数foo(x){
    控制台日志(x);
    }
    功能条(arg){
    console.log(arg.x,arg.y);
    }
    函数baz({x,y}){
    控制台日志(x,y);
    }
    foo(options.x);
    foo(options.y);
    酒吧(选择);
    
    baz(期权)谢谢!当我测试代码时,即使我没有在函数
    foo()中包含
    options
    ,它也能工作。是否有理由将
    options
    放在两个函数调用
    foo(选项)中
    和函数
    function foo(options){}
    ?由于闭包,您可以访问
    options
    并访问它,但是闭包中没有任何名称
    x
    ,因此您得到了错误x在javascript中没有定义有一个称为纯函数的概念。。尝试用这种方式编写函数。若你们这样写的话,你们可以有更可预测的行为…对于闭包部分+1.