ActionScript внутри вложенной функции

Спецификация языка ActionScript 3 гласит:

В ECMA-262 edition 3, когда он появляется во вложенной функции, он привязывается к глобальному объекту, если функция вызывается лексически, без явного объекта-получателя. В ActionScript 3.0 this привязан к самому внутреннему вложенному this, когда функция вызывается лексически.

(Источник: http://help.adobe.com/livedocs/specs/actionscript/3/wwhelp/wwhimpl/js/html/wwhelp.htm)

Однако я попробовал следующее, и мой результат оказался не тем, что я ожидал от приведенного выше предложения - this внутри вложенной функции привязан к глобальному объекту:

     function f():void
     {
        trace("f() this.a", this.a); // "ok"
        function g():void { trace("g() this.a", this.a); } // "undefined"
        g();
     }
     f.call( { a: "ok" } );

Либо здесь неверная документация, либо я не правильно понял. Вы можете мне объяснить?


person fishbone    schedule 19.02.2015    source источник
comment
Да, я тоже не могу понять это заявление. По моему опыту this всегда глобален внутри вложенной функции. К вашему сведению, если вы отследите this, вы получите [object global], когда его global.   -  person Aaron Beall    schedule 19.02.2015
comment
Никогда не используйте это. Не используйте его, потому что в большинстве случаев он используется неправильно или не совсем понимает, что это значит. Не использовать это заставляет вас правильно структурировать свой код. Это похоже на правило использования родительских или вложенных функций внутри функций.   -  person moot    schedule 20.02.2015


Ответы (1)


Я считаю, что это ссылка на объект, а не на концепцию вложенной функции.

Если вы пытаетесь:

 function f(target:Object):void
 {
     trace("f() this.a", target.a); // "ok"
     function g():void { trace("g() this.a", target.a); } // "ok"
     g();
 }

 f( { a: "ok" } );
person gabriel    schedule 19.02.2015
comment
Поведение вашего примера идентично в ECMAScript 3 / JavaScript, тогда как спецификации описывают поведение, которое отличается от ECMAScript - person fishbone; 19.02.2015