【问题标题】:double double parentheses javascript双双括号javascript
【发布时间】:2015-12-27 23:56:33
【问题描述】:

我在一本书中找到了这段代码:

function foo() {
  console.log( this.a );
}

var a = 2;
var o = { a: 3, foo: foo };
var p = { a: 4 };
o.foo(); // 3
(p.foo = o.foo)(); // 2

最后一行是什么意思?

【问题讨论】:

    标签: javascript syntax


    【解决方案1】:

    最后一行是做赋值,然后调用函数。

    分配首先发生

    (p.foo = o.foo)
    

    然后调用函数

    (p.foo = o.foo)();
    

    在对 foo 的第二次调用中,它是在 p 或 o 的范围之外被调用的,所以它本质上与调用相同:

    foo();
    

    【讨论】:

    • 这是否等于 p.foo = o.foo; p.foo();
    • 但是如果你运行代码 (p.foo = o.foo)();打印 2 p.foo = o.foo; p.foo();打印 4
    • @user1272913:它们不相等。函数调用中this 的值将是window 对象,因为作为括号的结果,函数与任何对象分离。它更相当于var f = (p.foo = o.foo); f();
    • 如果你调用 p.foo(),你是在变量 a 作用域为 p 的 p 对象上调用它。在示例 (p.foo = o.foo)(); 中,您正在分配一个函数,然后在任一变量的范围之外调用它,因此使其使用定义为 2 的变量 a。
    • 好的,我想我明白了:这相当于:c=p.foo=o.foo;c()
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多