2021-05-09 23:15:08
なでしこさんV3のスコープ
JavaScript と比較してみる。 関数 F の中に関数 f を置く。引数なしで f() を実行。 まずは JavaScript。 function F(X){ function f(){ return X; } return f(); } alert(F(2)); //-->2 なでしこさん。 ●(X)Fとは ●()fとは Xを戻す。 ここまで f()して、戻す。 ここまで F(2)して、表示する。 //-->undefined JavaScript は変数の参照先が関数内で見つからないと直上の関数の変数を探しにいく。 なでしこさんは変数の参照先が関数内で見つからないとグローバル変数を探しにいく。 次は変数宣言なしで代入。 function f(){ A=1; } f(); alert(A); //-->1 //Aは3。 ●()fとは Aは1。 ここまで f()。 Aを表示する。 //-->undefined //Aは3。の行を追加した場合は-->1 JavaScript で変数宣言なしに代入するとそれはグローバル変数となる。 なでしこさんで変数宣言なしに代入すると、 もしそれがすでにグローバル変数にあれば グローバル変数となり、 なければ ローカル変数となる。 というか宣言があろうとなかろうと先にグローバル変数として存在していなければ全てローカル変数になるのか。 いや、いいとかわるいとかでなく、確認までに。 AWK も「似た」ようなモンだし(ruby もそうらしいけどわたしは使えない)。 |