スコープ
変数の有効範囲といえる
多くの場合、スコープを抜けた変数は消える
code: example.js
let a = 0;
function func() {
let a = 1;
console.log(a); # -> 1
}
func()
console.log(a) # このとき a の値は何か?
あんまり例として良くないかもこのコード
名前空間は、同一の名前が衝突しないように空間を分ける機能という認識
スコープ
より大きなスコープで定義された変数と同じ名前の変数を、小さいスコープで定義して変更を加えても、大きいスコープでの値には影響がない
議論の参考になると思うt6o_o6t.icon
読んでいるt6o_o6t.icon
有効範囲という考え方
名前空間
名前空間とスコープの共通点
名前と値の対応関係を持つ
名前空間とスコープの相違点
機能的な違い
名前空間は、空間を指定してその内部の名前を指すことができる仕組み
スコープは、特定の名前を指せば、対応する値を自動的に見つけることができる仕組み
本来的にはローカル変数を名前空間の中に入れても成立する?
名前空間でそれを行うと、各呼び出しを区別できない可能性
スコープは言語機能として、
少なくとも関数スコープを名前空間で代替すると不自然ではないか?
スコープは、スコープの中と外を自動的に隔離する機能と言える?
unshareでpid空間を隔離すると、異なる空間のプロセスが見えなくなるように
スコープが新しく生まれる際自動的に、変数の名前空間を隔離する
スコープは有効範囲でもある
スコープを物として考えた場合、名前の有効範囲、名前空間といえる
スコープを機能として考えた場合、自動的隔離機能といえる
人間はスコープの空間名を必要としない
スコープは名前空間を自動的に作るから
人間が操作をする必要がない
人間はスコープ内の名前を直接参照する
スコープという機能には名前の参照方法も含まれる
新しいスコープを作るときに現在のスコープをコピーする場合
そのような方法を採る言語があるのかはわからないt6o_o6t.icon
名前を参照する際には、単に現在のスコープを見れば良い
スコープを、階層状に構築していく場合
ある名前が参照されたとき、まず現在のスコープ(名前空間)を見る
もし該当する名前が無かったら、1つ上のスコープを見る
最終的にグローバルまで到達
もしグローバルな名前空間にも見つからなければエラー
静的スコープは、関数がどのような呼び出し方でも変数の値が呼び出し側に依存しないことを保証する
動的スコープの言語では、ソースコードで離れた場所にある関数でも、変数の代入などが引き継がれる
関数の呼び出しごとに自動的に名前空間を隔離していないから
動的スコープは、機能的に名前空間に近い?
LOCALという名前空間を全員で共有するイメージ
関数fでaという変数を変更
LOCAL::a = 3
fの中でgを呼び出し
gの中でaを参照
名前空間は共有なので、LOCAL::aの値は3
fの処理を終わる
LOCAL::a =
スコープは変数の代入が関心事?
名前空間の