10月
28
再入門JavaScript – Scopeを作る
Filed Under (Uncategorized) by on 28-10-2008
スコープ
javascriptにはPerlのようにレキシカルブロックが明示的に提供されていません。
なので、
JAVASCRIPT:
-
var i = 0;
-
-
{
-
var i = i;
-
i++;
-
i++;
-
console.log(i); // 2であってほしい
-
}
-
console.log(i); // 0であってほしい
このようにはかけません。
もしレキシカルにスコープを生成したい場合にはクロージャを使います。
JAVASCRIPT:
-
var i = 0;
-
-
(function(){
-
var i = window.i;
-
i++;i++;
-
console.log(i);
-
})();
-
console.log(i);
上記のプログラムはfunction(){}として、無名のクロージャを生成してそのまま実行しています。
ちなみにPerlのレキシカルスコープと少し異なるのは関数の宣言に関してです。
この場合、get_valはCurrent Packageである、XXXのシンボリックテーブルに記憶されますが
JAVASCRIPT:
-
(function(){
-
var val = undefined;
-
function getValue(){
-
return val
-
}
-
-
})();
-
-
getValue(); // 関数が見つからない。
javascriptの場合、packageの概念は無いので、レキシカルスコープにはりつきます。
JAVASCRIPT:
-
var XXX = {};
-
(function(){
-
var val = 11;
-
function getValue(){
-
return val
-
}
-
XXX.getValue = getValue;
-
-
})();
-
-
XXX.getValue();
レキシカルスコープ上の関数を外部から参照可能にするためにはグローバルから参照可能な
オブジェクトに対して明示的に貼り付けてやる必要があります。
また、
JavaScriptの場合、ファイルベースのレキシカルスコープは存在しないので、
複数のJSの読み込まれているページの場合、それぞれのJSは明示的に
レキシカルスコープを作成する必要があります。

[...] 再入門javascript - scopeを作る [...]
[...] 再入門javascript - scopeを作る [...]