Использование оператора 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())
заставить его исполниться в правильном порядке.
Может ли кто-нибудь объяснить мне основную казнь?