blog.Ring.idv.tw

變數範圍-在「Function」上用「var」來宣告變數的差異(一)

變數範圍-在「Function」上用「var」來宣告變數的差異(一)

從「變數範圍-在「Frame」上用「var」來宣告變數的差異」一文中我們可以得知,在「Frame」上無論是否使用「var」來宣告變數,其實是沒有太大的差異的~但是在「Function」上卻俱備重要的意義。

在「Function」上用「var」來宣告變數的差異

我們依然製作兩個欲測試的flash(均發佈為Flash Player 9),並且在它們的「Frame 1」個別加上些程式以便驗證,如下述:

var:Frame 1

i = 10;
function test()
{
	var i = 20;
}
test();
trace(i);

結果:

10

non_var:Frame 1

i = 10;
function test()
{
	i = 20;
}
test();
trace(i);

結果:

20

從兩者的結果中,其實我們就可以發現在「Function」加上「var」宣告,才是明確的定義此變數為「區域變數」,否則便是「實體(時間軸)變數」,然而這從這兩者的bytecode上來看的話,前者是利用ActionCode「0x8E」(ActionDefineFunction2)的方式來定義,而後者則是利用ActionCode「0x9B」(ActionDefineFunction),這兩者最大的差別在於前者(ActionDefineFunction2)可以將「參數」或「區域變數」利用Flash Player內部的「Register」來取而代之,而且更擴增「Register」到「255」個,以便增強其執行速度~但這並不是重點所在,重點在於前者的「test()」function裡面是利用ActionCode「0x87」(ActionStoreRegister)來將「20」這個值儲存於「Register」之中,所以我們在「Function」之外並無法取得它,也就是所謂的「區域變數」,而後者則是利用ActionCode「0x1D」(ActionSetVariable)來將「20」這個值儲存於「_level0」這個MovieClip的「實體變數」之中,這便是兩者之間的差異所在。

範例下載

本文若有任何謬誤,希望請不吝地賜教,若能指正不勝感激。

2007-06-13 01:45:30

2 comments on "變數範圍-在「Function」上用「var」來宣告變數的差異(一)"

  1. 1. scribbler 說:

    说的很好.我也正在研究action script工作.可以相互交流一下.

    2008-04-16 14:53:08

  2. 2. Shen 說:

    呵~ 谢谢~ 欢迎常来坐坐 ^^

    2008-04-16 20:08:53

Leave a Comment

Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: Ads :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment