[ Fs422.CoM]        热烈庆祝风沙电脑技术网站今天开张,做了一年的垃圾站,决定做一个对自己有帮助的站,或许也能帮到你,谢谢你的光临!!!如果有什么问题,可以点此给我留言------风少 2008.7.31
返回首页
当前位置: 首页 > Flash > Flash编程语法 > 浏览正文

函数作用域

时间:2009年05月22日来源:网络 作者:hn1688 点击:
函数的范围不但决定了可以在程序中的什么位置调用函数,而且还决定了函数可以访问哪些定义。适用于变量标识符的作用域规则同样也适用于函数标识符。在全局作用域中声明的函数在整个代码中都可用。例如,ActionScript 3.0 包含可在代码中的任意位置使用的全局函数,如 isNaN() 和 parseInt()。嵌套函数(即在另一个函数中声明的函数)可以在声明它的函数中的任意位置上使用。
 

函数的范围不但决定了可以在程序中的什么位置调用函数,而且还决定了函数可以访问哪些定义。适用于变量标识符的作用域规则同样也适用于函数标识符。在全局作用域中声明的函数在整个代码中都可用。例如,ActionScript 3.0 包含可在代码中的任意位置使用的全局函数,如 isNaN()parseInt()。嵌套函数(即在另一个函数中声明的函数)可以在声明它的函数中的任意位置上使用。

作用域链

无论何时开始执行函数,都会创建许多对象和属性。首先,会创建一个称为激活对象 的特殊对象,该对象用于存储在函数体内声明的参数以及任何局部变量或函数。由于激活对象属于内部机制,因此您无法直接访问它。接着,会创建一个范围链,其中包含由 Flash Player 或 Adobe AIR 检查标识符声明的对象的有序列表。所执行的每个函数都有一个存储在内部属性中的作用域链。对于嵌套函数,范围链始于其自己的激活对象,后跟其父函数的激活对象。作用域链以这种方式延伸,直到到达全局对象。全局对象是在 ActionScript 程序开始时创建的,其中包含所有的全局变量和函数。

函数闭包

函数闭包 是一个对象,其中包含函数的快照及其“词汇环境”。函数的词汇环境包括函数范围链中的所有变量、属性、方法和对象以及它们的值。无论何时在对象或类之外的位置执行函数,都会创建函数闭包。函数闭包保留定义它们的作用域,这样,在将函数作为参数或返回值传递给另一个作用域时,会产生有趣的结果。

例如,下面的代码创建两个函数:foo()(返回一个用来计算矩形面积的嵌套函数 rectArea())和 bar()(调用 foo() 并将返回的函数闭包存储在名为 myProduct 的变量中)。即使 bar() 函数定义了自己的局部变量 x(值为 2),当调用函数闭包 myProduct() 时,该函数闭包仍保留在函数 foo() 中定义的变量 x(值为 40)。因此,bar() 函数会返回值 160,而不是 8

function foo():Function 
{ 
    var x:int = 40; 
    function rectArea(y:int):int // function closure defined 
    { 
        return x * y 
    }  
    return rectArea; 
} 
function bar():void 
{ 
    var x:int = 2; 
    var y:int = 4; 
    var myProduct:Function = foo(); 
    trace(myProduct(4)); // function closure called 
} 
bar(); // 160

方法的行为与函数闭包类似,因为方法也保留有关创建它们的词汇环境的信息。当方法提取自它的实例(这会创建绑定方法)时,此特征尤为突出。函数闭包与绑定方法之间的主要区别在于,绑定方法中 this 关键字的值始终引用它最初附加到的实例,而函数闭包中 this 关键字的值可以改变。有关详细信息,请参阅方法。

 
顶一下
()
%
踩一下
()
%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
推荐内容
  • 函数作用域

    函数的范围不但决定了可以在程序中的什么位置调用函数,而且还决定了函数可以访问哪些定义。适用于变量标识

  • 函数作为对象

    作为参数传递给另一个函数的函数是按引用(而不是按值)传递的。在将某个函数作为参数传递时,只能使用标识

  • 函数参数

    ActionScript 3.0 为函数参数提供了一些功能,这些功能对于那些刚接触 ActionSc

  • 函数的基本概念

    可通过使用后跟小括号运算符 (()) 的函数标识符来调用函数。要发送给函数的任何函数参数都括在小括号

  • 循环

    循环语句允许您使用一系列值或变量来反复执行一个特定的代码块。Adobe 建议您始终用大括号 ({})

  • 条件语句

    使用 if..else 条件语句可以测试一个条件,如果该条件存在,则执行一个代码块,如果该条件不存在

  • 运算符

    运算符是一种特殊的函数,它们具有一个或多个操作数并返回相应的值。操作数 是运算符用作输入的值(通常为

  • FlashAction常用编程元素

    除了声明变量、创建对象实例以及使用属性和方法来处理对象之外,还可以使用其它几个构造块来创建 Acti

  • ActionScript 创建对象实例

    当然,在 ActionScript 中使用对象之前,该对象首先必须存在。创建对象的步骤之一是声明变量

  • FlashAction事件

    我们已经介绍了计算机程序就是计算机分步执行的一系列指令。一些简单的计算机程序仅包括计算机执行的几个步