1

我想知道这条线的作用:

foo || (foo = this.foo)

在下面的函数定义中

someFunction: function(foo)  
{   
    foo || (foo = this.foo);  
    ...  
}
4

5 回答 5

6

这可能更常见地写成:

someFunction: function(foo)  
{   
    foo = foo || this.foo;
    // do something with foo
}

它所做的只是将foo参数设置为上下文的foo实例变量,如果:

  • someFunction不带参数调用
  • someFunctionfalsy使用诸如 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将回退到默认值。

于 2012-10-15T06:19:50.290 回答
4

如果foo没有交给someFunction,或者如果 的值foo评估为假,foo则将其this.foo作为“默认”值

编辑:它之所以有效,是因为包括 JS 在内的许多编程语言都使用短路评估。如果foo评估结果为真,引擎不会费心评估该(foo = this.foo)部分,因为整个语句已经为真。

如果foo为 false (记住 JS 不是强类型的,所以在这种用法中,那种意思是“不提供”),然后评估第二部分并最终设置foo.

于 2012-10-15T06:13:36.500 回答
0
foo || (foo = this.foo); 

是相同的

if (!!!foo) {
    foo = this.foo;
}
于 2012-10-15T12:36:10.263 回答
0

据我了解,它会检查foo参数是否已设置,如果未设置,则使用默认值 ( this.foo) 覆盖它。

于 2012-10-15T06:13:49.857 回答
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);
}
于 2012-10-15T06:14:47.147 回答