-
Notifications
You must be signed in to change notification settings - Fork 7
Scope
#Scope
##実行時スコープの種類
###関数スコープ
同一の関数であっても実行単位毎に独自のlocal変数を持つ
つまり再帰的に関数を呼び出した場合やスレッドを作成した場合、それぞれのlocal変数は異なる
local変数の生存期間は実行単位の終了までである
static変数は関数そのものに関連付けられた変数である
実行単位が異なっても、同じ関数であれば同じstatic変数を持つ
static変数の生存期間は関数そのものの生存期間と同じである
実装上の話をすれば関数内のstatic変数とは関数のメンバに他ならない
func(){static x;}にfunc.x
でアクセスすることも出来る
PSLは実行時に最も外側にある基本的な実行単位として暗黙の関数スコープを作成する
そこで宣言された変数が自動的にglobal変数になるようなことはないが
その領域のstatic変数はglobal変数と同一である
###無名スコープ
制御上の意味を持たないが、
独自のlocal変数領域を新たに作成する
外側のスコープのlocal変数にもアクセス可能
スコープの終了と同時にlocal変数は破棄される
if文は書式({}の有無)に関わらず暗黙の無名スコープを作成する
###ループスコープ
breakで終了し、continueで既定の位置までジャンプする
その他の動作は無名スコープと変わらない
###コンストラクタスコープ
スコープ指定をしない変数宣言をした場合にlocalではなくthisのメンバとして登録する
その他の動作は関数スコープに準ずる
尚、localキーワードを明示すればコンストラクタスコープ内に於いてもlocal変数を扱うことは可能である
###メソッドスコープ
local変数に存在しない名前をthisのメンバを参照して解決する
その他の動作は関数スコープに準ずる
staticはinstance.method.xではなくclass.method.xである
##変数の種類
global
local
static
の三種がある
###global
いかなる場所からでもアクセス可能な変数で
一度作成すると実行中は存在し続ける
###local
実行スコープに依存する変数
同じ関数内のそれより内側のスコープからアクセス可能
スコープの終了と同時に破棄される
###static
関数自体に関連付けられた変数で
実行とは無関係に関数が存在する間は存在し続ける