隨筆-159  評論-114  文章-7  trackbacks-0
          是直接寫在包里的函數(shù),包里沒有類,只有函數(shù),這樣的函數(shù)叫函數(shù)閉包
          函數(shù)在類里出現(xiàn)通常叫方法,


          http://help.adobe.com/zh_CN/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f54.html
          函數(shù)閉包 是一個對象,其中包含函數(shù)的快照及其“詞匯環(huán)境”。函數(shù)的詞匯環(huán)境包括函數(shù)范圍鏈中的所有變量、屬性、方法和對象以及它們的值。無論何時在對象或類之外的位置執(zhí)行函數(shù),都會創(chuàng)建函數(shù)閉包。函數(shù)閉包保留定義它們的作用域,這樣,在將函數(shù)作為參數(shù)或返回值傳遞給另一個作用域時,會產(chǎn)生有趣的結(jié)果。

          例如,下面的代碼創(chuàng)建兩個函數(shù):foo()(返回一個用來計算矩形面積的嵌套函數(shù) rectArea())和 bar()(調(diào)用 foo() 并將返回的函數(shù)閉包存儲在名為 myProduct 的變量中)。即使 bar() 函數(shù)定義了自己的局部變量 x(值為 2),當(dāng)調(diào)用函數(shù)閉包 myProduct() 時,該函數(shù)閉包仍保留在函數(shù) foo() 中定義的變量 x(值為 40)。因此,bar() 函數(shù)會返回值 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

          方法的行為與函數(shù)閉包類似,因為方法也保留有關(guān)創(chuàng)建它們的詞匯環(huán)境的信息。當(dāng)方法提取自它的實例(這會創(chuàng)建綁定方法)時,此特征尤為突出。函數(shù)閉包與綁定方法之間的主要區(qū)別在于,綁定方法中 this 關(guān)鍵字的值始終引用它最初附加到的實例,而函數(shù)閉包中 this 關(guān)鍵字的值可以改變。有關(guān)詳細(xì)信息,請參閱方法。

          posted on 2009-12-29 14:29 北國狼人的BloG 閱讀(210) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 北碚区| 巫溪县| 文登市| 绥滨县| 陵川县| 甘德县| 四子王旗| 新郑市| 宁远县| 上蔡县| 海安县| 浦城县| 望江县| 花莲县| 三都| 阿勒泰市| 黎平县| 贵溪市| 汽车| 盐源县| 黑龙江省| 威宁| 安义县| 阿巴嘎旗| 遂平县| 永德县| 额敏县| 桐柏县| 玉林市| 澜沧| 铜山县| 嘉祥县| 株洲市| 喜德县| 大新县| 天峨县| 茶陵县| 上虞市| 襄垣县| 板桥市| 墨竹工卡县|