var foo = { bar: function () { console.log(this); } }; foo.bar(); // foo object (foo.bar)(); // foo object (foo.bar = foo.bar)(); // window (false || foo.bar)(); // window (foo.bar, foo.bar)(); // window
请高人帮忙解释一下,为什么最后三个输出的是 window?
另外foo.bar()与(foo.bar)()是否相同,如果有区别是什么区别?
后三个括号里面都是表达式,中间产生了一个匿名的函数,调用的实际上是这个匿名的函数,所以这里的function context变成了global的了。
如果没有生成新的匿名表达式,这种写法应该是等价的。
非常感谢,我对这种方式很陌生,能否再详细说说这个匿名函数是怎么产生的呢?或者给点相关的资料也行,感谢!
@草根程序猿: 你可以把他看成
(function(){dosomething();})();
我是在看一本叫:javascript secrets的书。
呵呵,里面经常用一些忍者啊武士啊之类的小日本的词汇,让我看着有点不太愿意推荐。不过书还是好书啦
@Ethan轻叹:
谢谢。也就是说当一对小括号中有运算符时,这对小括号在执行过程中会产生一个匿名函数,对吧。因为(foo.bar)();这里第一对括号中没有运算符,所以没有产生匿名函数,所以结果是foo,是这样理解的吗?