let式とlet宣言の微妙な差異

ちょっとだけハマったのでメモ。let式内で複数の変数を定義するとき,同時に定義した他の変数は参照出来ない,というお話。
varの場合,同時に定義した変数xの値を参照することができる。

var x = "a", y = x + "b";
alert(y); // => "ab"

let"宣言"の場合もvarと同様に,yの定義部からxの値を参照できる。

let x = "a", y = x + "b";
alert(y); // => "ab"

ところが,let"式" (またはlet"文") の場合はこれができない

let (x = "a", y = x + "b") alert(y); // => x is not defined

let式で意図した通りの挙動を実現するためには,let式を入れ子にするしか無いようだ。

let (x = "a") let (y = x + "b") alert(y);

当然Lispのlet*のようなものは用意されていない。ちょっと面倒だなー。