+ JavaScript の質問用スレッド vol.85 +

このエントリーをはてなブックマークに追加
861Name_Not_Found
>>857
var foo = "0";
(function() {
 // この時点で foo が関数スコープにundefined値で存在する
 alert(foo); // undefined
 var foo = "0"; // これはただの代入式(変数の初期化ではない)
})();

呼出された関数の文脈に入る前に関数宣言、仮引数、変数宣言(初期値undefined)でメモリが確保されるです。
862Name_Not_Found:2011/04/23(土) 20:59:16.55 ID:vWUGB5na
位置行削るとなんか変

var foo = "0";
(function() {
    // この時点で foo が関数スコープにundefined値で存在する
    alert(foo); // undefined
})();
863Name_Not_Found:2011/04/23(土) 21:03:27.15 ID:???
864Name_Not_Found:2011/04/23(土) 21:15:07.45 ID:???
>>862
undefined にならないぞ?
865Name_Not_Found:2011/04/23(土) 21:20:59.94 ID:vWUGB5na
関数スコープができた時点で
「var foo」で、変数オブジェクトのプロパティfooが値undefinedでセットされる

関数が実行されて、「alert(foo)」の時点では値はundefined、
「var foo = 0」で、初めて代入式が発火

って理解であってます?
866Name_Not_Found:2011/04/23(土) 21:21:07.26 ID:???
Hoistingもテンプレに入れた方がいいのかね
867Name_Not_Found:2011/04/23(土) 21:21:30.64 ID:vWUGB5na
>>864
うん。>>861を位置行削っただけだから
868Name_Not_Found:2011/04/23(土) 21:29:26.04 ID:???
>>861のとおりなら>>862もundefinedが返る気がするんだが
869 忍法帖【Lv=1,xxxP】 :2011/04/23(土) 21:32:39.25 ID:???
ボタンを押すとあらかじめ決められた単語から3つランダムで出力するものを作りたいです
例えば「あ」〜「ん」の51音からランダムで3つ出力して「し」「ま」「え」など
ボタンを押すたびにランダム出力するものを作りたいのですが教えていただけないでしょうか
870Name_Not_Found:2011/04/23(土) 21:36:36.48 ID:???
>>865
合ってる。>>857の例でいえば下記と同じ。

var foo = "0";
(function() {
 var foo;
 alert(foo); // undefined
 foo = "0";
})();

全ての変数は関数が呼び出されたときに undefined で実体化(初期化)される。
だから「関数冒頭で変数を宣言したほうがよい」とよくいわれる。