【发布时间】:2018-02-23 18:42:52
【问题描述】:
我想使用一个对象作为函数参数。当我在函数之外定义一个对象然后将其作为参数传递时,它工作正常:
var obj = {
a: 0
}
function foo(obj){
console.log(this.obj.a);
}
foo() //0
但是当我直接传递一个对象时,它不起作用:
function bar({a: 0}){
console.log(this.arguments.a)
}
// Uncaught SyntaxError: Unexpected number
一个对象似乎不是一个合法的论点。我该如何解决?
【问题讨论】:
-
this 只是上下文!!!不要用它来访问变量。
-
您正在混合函数调用和函数定义。参数在函数调用中传递,它们没有在函数定义的参数列表中获取它们的值。
-
您完全误解了javascript中参数和变量的工作方式。对参数和变量名重复使用相同的名称会使您感到困惑。您可以将对象作为参数传递,但不能在函数定义中定义它。
-
您的推论有误。在第一个示例中,您甚至没有将值传递给
foo。所以this.obj实际上不能引用参数obj。在第一个示例中使用function foo(){ console.log(this.obj.a); }(注意:无参数),您会发现它仍然可以正常工作。所以this.obj与参数obj无关。你需要做两件事:Learn more about functions 和 learn howthisworks。 -
很遗憾这里没有一个答案试图解释上下文,因为这可能有助于消除很多混乱。
标签: javascript function object