Взгляните на раздел 13.2.2 [[Construct]] в спецификации. Точнее, шаг 9 алгоритма.
blockquote>
- Если Type (result) - Object, то возвращает результат.
Функции объекты, поэтому, если вы вернете функцию из функции и попытаетесь создать экземпляр последней функции с помощью
new
, вы вернете прежнюю функцию, а не новый объект. Но функции также являются конструкторами, поэтому вы можетеnew
вернуть функцию.function bar() {} function foo() { return baz; } new foo === bar; // true