var a = 1; var foo = {     a: 2,     bar: function () {         return this.a;     } }; console.log(foo.bar());  //这个很容易理解 bar函数的this绑定在foo对象上 console.log((foo.bar)()); //这个加不加括号都等同于上面 console.log((foo.bar=foo.bar)()); //这个可能比较难理解 因为里面是一个赋值运算 表达式返回的是foo.bar这个值 那么这个值是什么呢 其实是一个匿名函数  function () {    return this.a; } 所以 第三个console.log 可以等价为 console.log((function () {    return this.a; })()) 故打印出来就是全局上的a变量了 最后留个问题 console.log((a=foo.bar)()) 这个打印出的结果是什么呢