関数内でvar宣言したものは関数内のスコープ。関数内でvarなしで使ったものはグローバル。それがグローバルになければエラー。いわゆるブロックスコープはない。
ブロック内は新しいスコープになる。while,until,forはスコープを導入しない。$で始まる変数はグローバル変数。