Cmm では、同一名の変数を次々と定義しても、変数の多重定義エラーにはなり ません。
ブロック式の場合、ブロック内で定義された変数エリアは、ブロック を抜けるときに開放されます。
例えば、以下のwhile式では、各ループごとに、ブロック内変数 a が定義され、ブロック式の最後で開放されます。
while (1) {
var a ;
a = "Hello World" ;
}
ところが、無スコープブロック式の場合は、このブロックスコープルー ルが摘要されません。以下のプログラムでは、各ループごとに、ブロッ ク内変数 a が定義されますが、開放されません。そのため、次々と 新たに変数エリアを取り、最後にはエリアがなくなります。
while (1) {{
var a ;
a = "Hello World" ;
}}
そのため、無スコープブロック式を、ループ内で利用する場合は細心 の注意が必要です。
また、下記のように関数やメソッド定義の最外部のブロック式として、無スコープ ブロック式を利用することはできません。
func aFunc (x) {{
x ;
}}