我想知道这条线的作用:
foo || (foo = this.foo)
在以下函数定义中
someFunction: function(foo)
{
foo || (foo = this.foo);
...
}
答案 0 :(得分:6)
这可能更常被写为:
someFunction: function(foo)
{
foo = foo || this.foo;
// do something with foo
}
它只是将foo
参数设置为上下文的foo
实例变量,如果:
someFunction
不带参数调用someFunction
参数调用falsy
,例如false,空字符串,0,null或undefined。作为一个例子,假设someFunction是在对象文字中定义的,如下所示:
var myObject = {
foo: "default value of foo",
someFunction: function(foo)
{
foo = foo || this.foo;
// do something with foo
}
}
这样,someFunction
的参数foo
会在需要时回退到默认值。
答案 1 :(得分:4)
如果foo
未提交给someFunction
,或者foo
的值评估为false,则foo
将this.foo
作为“默认”值
编辑:它的工作原理是因为许多编程语言(包括JS)都使用short-circuit evaluation。如果foo
的计算结果为true,则引擎将不会考虑评估(foo = this.foo)
部分,因为整个语句已经为真。
如果foo
为假(并且记住JS没有强类型,那么在这种用法中,这种方式“未提供”),则第二部分被评估,最终设置foo
的值。
答案 2 :(得分:0)
据我了解,它检查foo
参数是否设置,如果没有,则用默认值(this.foo
)覆盖它。
答案 3 :(得分:0)
通常,foo
是虚拟变量的占位符。
someFunction: function(foo)
{
// If foo is null, then foo is assigned with this.foo
// If not, the original value of foo is taken.
foo || (foo = this.foo);
}
答案 4 :(得分:0)
foo || (foo = this.foo);
与
相同if (!!!foo) {
foo = this.foo;
}