foo.bar
здесь анонимная функция.
Это может иметь смысл, если вы разделите его на разные строки:
foo = {
bar: function() {
return this;
}
}
Итак, когда вы вызываете foo.bar
, вы получаете function() { return this; }
. В строке 2 вы вызываете эту функцию напрямую (foo.bar()
), поэтому она возвращает this
, экземпляр объекта (foo
).
В третьей строке вы получаете тот же результат, потому что вы не только запрашиваете анонимную функцию, но также выполняете эту функцию:
(foo.bar); // (function() { return this; }); A reference to the function
(foo.bar)(); // (function() { return this; })(); Actually calling the function
Поскольку в последнем случае вы выполняете функцию, как вы это делали в строке 2 результат тот же (foo
).
В строках 4 и 5, однако, как сказал Берги, операторы, которые вы используете, разыгрывают их из функции, что оставляет вас с Window
, а не foo
.