//ВОПРОС отсюда: что выдаст в консоли код?
var y = 1;
  if (function f(){}) {
    y += typeof f;
  }
  console.log(y);

//Chrome выводит 1function (я согласен с ним)
//почему в Opera и FF в консоли не 1function, а 1undefined?
//рассуждаем, как ведет себя движок:

-function declaration is hoisted to the top of the containing scope
-if видит текст «function f()», т.е. true
-т.е.выполняется:
function f(){}; 
var y = 1;
  if ("function f()") {
    y += typeof f;
  }
  console.log(y);//откуда берется 1undefined?!


//ведь console.log(typeof function f(){}) // => function?!




p.s.
1.вот НЕЯСНОЕ МНЕ объяснение автора задачи:
The output would be 1undefined. The if condition statement evaluates using eval, so eval(function f(){}) returns function f(){} (which is true). Therefore, inside the if statement, executing typeof f returns undefined because the if statement code executes at run time, and the statement inside the if condition is evaluated during run time.
2.и вот иное (верное, как по мне)решение:
он говорит, что тут не Function Declaration, а Function Expression, т.к. со скобки начинается объявление (хотя скобка вроде бы как часть синтаксиса if). У Function Expression её имя только локально для неё видимо. Потому интерпретатор видит что-то такое:
var y = 1;
  if (function f (){}) {
    y += typeof smth;
  }
  console.log(y);// 1undefined
вопросы 1-3 ниже остаются:
1. Действительно функция в if выполняется и возвращает undefined, как говорит автор вопроса в «inside the if statement, executing typeof f returns undefined because the if statement code executes at run time»?
Я думаю, что нет, так как:
var y = 1;
  if (function f (){return 22}) {
    y += typeof f;
  }
  console.log(y)//1function в Chrome или 1undefined в FF (а иначе возвращал бы 23)
2.то есть в if (function f (){}) {} имеем Function Expression? Из-за скобки? Но тогда почему if (boolean){function f (){}} всегда трактуется как Function Declaration, и, хотя вкладывать нельзя Function Declaration в {}, в if (boolean){function f (){}} будем иметь Function Declaration, хоть перед ней и идет {?

3.И всё же почему разные браузеры по-разному в консоли выводят результат (1function в Chrome или 1undefined в FF ), ведь в Opera после 14.0 и Chrome стоит движок один и тот же: WebKit?
Читал ещё ответы на эту задачу, но пока не уяснил.