`

AS 函数作用域、函数闭包、限界方法

阅读更多

 

作用域链(scope chain):

任何时候函数开始执行,都有一些对象和属性被创建。

首先,一个叫做activation object(活化对象)的特殊对象被创建,用来储存参数和该方法体中的其他本地变量或函数。这个对象你无法直接获取到,因为这属于内部机制。

其次,一个scope chain(作用域链)被创建,它包含一个有序列表,列表中的对象是由Flash Player或Adobe AIR用来核查标识符声明的。

任何执行中的函数都有一个由内部属性保存的作用域链。对于嵌套函数,作用域链开始于其自身的activation object,然后是其父函数的activation object。作用域链按照这种方式继续下去,直到global object(全局对象)。全局对象在ActionScript程序开始时被创建,包含了所有的全局变量和函数。

 

 

函数闭包(function closure):

一个函数闭包是一个对象,包含了该函数及其lexical environment(词汇环境)的快照。函数的词汇环境包含该函数所有的变量、属性、方法和用域链内的对象,以及他们的值。函数在对象或类的外部运行时,就会创建函数闭包。函数闭包保留了它被定义时的作用域,这在有些情况下会导致一些很有意思的结果,比如:函数作为参数或者返回值在不同的作用域中时。

 

 

bound method(限界方法):

限界方法,有时候也叫做方法闭包,指的是从其实例中抽出来的方法,包括作为某函数的参数或者作为某函数的返回值这两种情况。

 

限界方法和函数闭包类似的是,它虽然被从实例中抽取出来,但保留了本身的词汇环境。关键的不同是,在限界方法中,this关键字的引用仍然是实现该方法的实例。也就是说,限界方法中,this引用总是指向实现该方法的最初的对象。而函数闭包中,this关键字则是普通意义上的,即总是指向该方法被调用时关联的对象。

 

唉,关于定义还是有点模糊。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics