1

Есть 2 куска кода:

1.

var foo = {
  bar: function(){ return this.baz; },
  baz: 1
}
typeof (f = foo.bar)();

2.

var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;

В первом случае ответ undefined. А втором - 2.

Не могу понять, почему ответы именно такие. Вероятно, из-за того, что не понимаю, как работает выражение ()(). Прошу объяснить.

smellyshovel
  • 5,224
  • а примеры вроде неравнозначны. если первый должен быть похож на второй, то там должно быть f = (foo.bar)(); typeof f; и тогда будет работать одинаково – Алексей Шиманский Sep 25 '17 at 17:27
  • @АлексейШиманский Дело в том, что я бы сравнил первый больше с IIFE, но меня напрягло то, что там сразу 2 функции, да еще и через запятую. А во втором - результат присвоения должен возвращаться (как я думаю). Но обе один похожи, поскольку это "какой-то код внутри скобок, с (trailing, не знаю, как перевести) скобками". – smellyshovel Sep 25 '17 at 17:28
  • Во втором не typeof f, а f будет 2. А typeof f будет number. – Qwertiy Sep 25 '17 at 19:19

0 Answers0