Actionscript 3 ActionScript在嵌套函数中执行此操作

Actionscript 3 ActionScript在嵌套函数中执行此操作,actionscript-3,flash,actionscript,nested-function,ecma262,Actionscript 3,Flash,Actionscript,Nested Function,Ecma262,ActionScript 3语言规范规定: 在ECMA-262第3版中,当它出现在嵌套函数中时,如果函数是按词汇调用的,而没有显式的接收方对象,则它将绑定到全局对象。在ActionScript3.0中,当按词汇调用函数时,它被绑定到最里面的嵌套this 资料来源: 但是,我尝试了以下操作,结果与上面的句子不同-嵌套函数中的this绑定到全局对象: function f():void { trace("f() this.a", this.a); // "ok"

ActionScript 3语言规范规定:

在ECMA-262第3版中,当它出现在嵌套函数中时,如果函数是按词汇调用的,而没有显式的接收方对象,则它将绑定到全局对象。在ActionScript3.0中,当按词汇调用函数时,它被绑定到最里面的嵌套this

资料来源:

但是,我尝试了以下操作,结果与上面的句子不同-嵌套函数中的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" } );

这里的文档有误,或者我没有正确理解。你能解释一下吗?

我相信案例是对对象的引用,而不是嵌套函数的概念

如果您尝试:

 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" } );

您的示例在ECMAScript 3/JavaScript中的行为是相同的,而规范描述的是一种不同于ECMAScript的行为。是的,我也无法理解这种说法。根据我的经验,这在嵌套函数中总是全局的。仅供参考,如果您跟踪它,当它是全局的时,您将得到[object global]。您不应该使用它。不要使用它,因为在大多数情况下,它被不正确地使用或者没有真正了解它的含义。不使用它会迫使您正确地构造代码。这就像在函数内部使用父函数或嵌套函数的规则一样。