generated at
動的スコープ

dynamic scope
ダイナミックスコープ
関数を実行した場所でスコープが決まる
実行時にスタックをたどって変数を探す
よって、コードの呼び出し順にスコープが決まる
静的スコープに比べると、(言語の)実装が容易、らしい
動的スコープにおける名前束縛のことを動的束縛という

例1
example
var x = 100; var a = () => { var x = 0; return () => x; }; var b = a(); x; // 100 b(); // 100

例2
example
var x = 100; var b = () => x; var a = () => { var x = 0; return b(); }; x; // 100 a(); // 0
a() を呼び出したときのコールスタックは
callstack
a // `a`が呼び出された、中身を見てみよ、あ、b呼んでるやんb呼ぼ b // `b`が呼び出された、中身を見てみよ、xをreturnしてるね、xってなんや?bの中身見てみよ x=0 // あ、bの中で`x=0`ってしてるやん!

例3
example
var x = 100; var a = () => x; a(); // undefined


実装が容易な動的スコープのLispを実装してみようという記事


言語例