+ JavaScript の質問用スレッド vol.85 +
>>857 var foo = "0";
(function() {
// この時点で foo が関数スコープにundefined値で存在する
alert(foo); // undefined
var foo = "0"; // これはただの代入式(変数の初期化ではない)
})();
呼出された関数の文脈に入る前に関数宣言、仮引数、変数宣言(初期値undefined)でメモリが確保されるです。
862 :
Name_Not_Found:2011/04/23(土) 20:59:16.55 ID:vWUGB5na
位置行削るとなんか変
var foo = "0";
(function() {
// この時点で foo が関数スコープにundefined値で存在する
alert(foo); // undefined
})();
865 :
Name_Not_Found:2011/04/23(土) 21:20:59.94 ID:vWUGB5na
関数スコープができた時点で
「var foo」で、変数オブジェクトのプロパティfooが値undefinedでセットされる
関数が実行されて、「alert(foo)」の時点では値はundefined、
「var foo = 0」で、初めて代入式が発火
って理解であってます?
Hoistingもテンプレに入れた方がいいのかね
867 :
Name_Not_Found:2011/04/23(土) 21:21:30.64 ID:vWUGB5na
ボタンを押すとあらかじめ決められた単語から3つランダムで出力するものを作りたいです
例えば「あ」〜「ん」の51音からランダムで3つ出力して「し」「ま」「え」など
ボタンを押すたびにランダム出力するものを作りたいのですが教えていただけないでしょうか
>>865 合ってる。
>>857の例でいえば下記と同じ。
var foo = "0";
(function() {
var foo;
alert(foo); // undefined
foo = "0";
})();
全ての変数は関数が呼び出されたときに undefined で実体化(初期化)される。
だから「関数冒頭で変数を宣言したほうがよい」とよくいわれる。