Использование оператора new с возвратом функции JavaScript возвращает нечетную область видимости

Я пытаюсь понять, почему новый работает против функции, а не возвращение функции в примереy =:

function returnFunction(){ return function blah(str){ this.x = str; return this;}}

y = new returnFunction()("blah")
// output: Window {x: "blah"; top: Window, window: Window, location: Location, ....}
x = new (returnFunction())("blah")
// output: blah {x: "blah"}

z = new function blah(){return this;}()
// output: blah {}

zz = new function(){return this;}() //note the missing function name
// output: Object {}

b = new function blib(str){this.x = str; return this}
// blib {x: undefined}
bb = new function blib(str){this.x = str; return this}("blah")
// blib {x: "blah"}
c = new function blib(){this.x = "blah"; return this}
// blib {x: "blah"}

Так что в случае уновый создает копиюreturnFunction затем вызывает его

y = (new returnFunction())()

И, вызывая анонимную функцию, мы не имеемthis так что по умолчаниюWindow.

На случай, еслиx, завернув в паренсы (returnFunction вызывается возвращаяblah функция), а затемblah вызывается новой настройкой оператораthis на новый объект.

Кажется странным, что я должен обернутьnew (returnFunction()) заставить его исполниться в правильном порядке.

Может ли кто-нибудь объяснить мне основную казнь?

Ответы на вопрос(2)

Ваш ответ на вопрос