JavaScript第5版を見ていたら、結構覚えてない物があったのでメモ。 まず、関数実行される時に、varで宣言された変数は、Callオブジェクトという物に登録される。 var f = function (a, b) { var c, d; }; f(1, 2); の場合だと、 var callObject = { c: undefined, d: undefined, __proto__: parentCallObject }; で、with (callObject) {}みたいに囲まれてるようなイメージ。外側のスコープを表わすCallオブジェクトも登録されている。 で、呼び出す時に渡された仮引数が、実引数の変数と共に、同じCallオブジェクトに登録される。argumentsも同時に作られる。 var callObject = { c: undefined, d: undefined,

