ここでいうdownstream codeってのはその束縛の中で実行されるコードで、
let文の中だけでなくそこから呼ばれる関数も含んだものを指している。

> Dynamic bindings make global variables much more manageable, but it's
> important to notice they still allow action at a distance. Binding a
> global variable has two at a distance effects--it can change the
> behavior of downstream code, and it also opens the possibility that
> downstream code will assign a new value to a binding established higher
> up on the stack. You should use dynamic variables only when you need to
> take advantage of one or both of these characteristics.

動的束縛によりグローバル変数はずっと扱いやすくなる。それでも
グローバル変数が離れた場所から操作できてしまう点に注意は必要だ。

[つまり、(let ((*global-var* hoge)) ...) とすると、 ... の中だけでなく
そこから呼ばれた関数でも*global-var*をsetfできてしまうことを指している。]

グローバル変数を束縛することは、2つの遠隔効果をもたらす。すなわち
一つは下流のコード [ 束縛したletの中、および、実行時にそこから呼ばれた
コード。 ] の振舞いを変え得ることで、もう一つは動的束縛では下流のコードも
スタックの上流で行われた束縛の値を変更することができるということだ。

この2つの性質のどちらかを利用する必要がある場合に限り、動的変数を
使うとよいだろう。