「Webアプリケーション構築入門」にて学習中です。
さて、第五章のP.259 ScopeTest3.htmlについて、
グローバル変数とローカル変数のところで躓いています。
P.259冒頭に、「関数の中でvarを使って変数を宣言すると、それがどのような場所であっても、その関数の先頭で宣言されたものとみなされる。」
とあります。
var str="まいど!";
function test1(){
alert("グローバル変数str="+str);
}
function test2(){
alert("代入する前のローカル変数str="+str);
var str="おおきに";
alert("代入した後のローカル変数str="+str);
}
ということは、test2()でのstrには、どちらも"おおきに"が入るのではないのでしょうか?
しかし、<INPUT TYPE="button" VALUE="テスト2" ONCLICK="test2()">
を実行すると、1度目のアラートにはundefinedが表示されます。
ご教授、宜しくお願いいたします。
さて、第五章のP.259 ScopeTest3.htmlについて、
グローバル変数とローカル変数のところで躓いています。
P.259冒頭に、「関数の中でvarを使って変数を宣言すると、それがどのような場所であっても、その関数の先頭で宣言されたものとみなされる。」
とあります。
var str="まいど!";
function test1(){
alert("グローバル変数str="+str);
}
function test2(){
alert("代入する前のローカル変数str="+str);
var str="おおきに";
alert("代入した後のローカル変数str="+str);
}
ということは、test2()でのstrには、どちらも"おおきに"が入るのではないのでしょうか?
しかし、<INPUT TYPE="button" VALUE="テスト2" ONCLICK="test2()">
を実行すると、1度目のアラートにはundefinedが表示されます。
ご教授、宜しくお願いいたします。
投稿:じゃじー[retro]/2008年 05月 29日 14時 07分
/更新:2008年 05月 29日 14時 12分
RE:JavaScriptの変数
by 竹形 誠司[takegata]
竹形です。こんにちは。
>test2()でのstrには、どちらも"おおきに"が入るのではないのでしょうか?
最初のalertが呼ばれた時点では、strの宣言だけが行われていて、代入は行われていません。そのため、undefinedになるのです。
と、本文に書いておけばよかったですね。説明が足りなくてすみません。
>test2()でのstrには、どちらも"おおきに"が入るのではないのでしょうか?
最初のalertが呼ばれた時点では、strの宣言だけが行われていて、代入は行われていません。そのため、undefinedになるのです。
と、本文に書いておけばよかったですね。説明が足りなくてすみません。
投稿:竹形 誠司[takegata]/2008年 05月 29日 15時 29分
/更新:2008年 05月 29日 15時 30分
さっそくの回答ありがとうございます。
ですが、やはり釈然としません。
>最初のalertが呼ばれた時点では、strの宣言だけが行われていて、代入は行われていません。
と
>>関数の中でvarを使って変数を宣言すると、それがどのような場所であっても、その関数の先頭で宣言されたものとみなされる。
の関係がどうも・・・。
alertの中にある+strのstrが宣言になっているということでしょうか。
それとも、
基本的なところで、お手数をお掛けしますが、宜しくお願いいたします。
ですが、やはり釈然としません。
>最初のalertが呼ばれた時点では、strの宣言だけが行われていて、代入は行われていません。
と
>>関数の中でvarを使って変数を宣言すると、それがどのような場所であっても、その関数の先頭で宣言されたものとみなされる。
の関係がどうも・・・。
function test2(){
alert("代入する前のローカル変数str="+str);
var str="おおきに";
alert("代入した後のローカル変数str="+str);
}
ここでstrを宣言しているのは、var str="おおきに"; にあたるのではないのでしょうか?alert("代入する前のローカル変数str="+str);
var str="おおきに";
alert("代入した後のローカル変数str="+str);
}
alertの中にある+strのstrが宣言になっているということでしょうか。
それとも、
function test2(){
var str;
alert("代入する前のローカル変数str="+str);
str="おおきに";
alert("代入した後のローカル変数str="+str);
}
こういう考え方で合っていますか?var str;
alert("代入する前のローカル変数str="+str);
str="おおきに";
alert("代入した後のローカル変数str="+str);
}
基本的なところで、お手数をお掛けしますが、宜しくお願いいたします。
投稿:じゃじー[retro]/2008年 05月 29日 15時 40分
/更新:2008年 05月 29日 15時 45分
まさに、
function test2(){
var str;
alert("代入する前のローカル変数str="+str);
str="おおきに";
alert("代入した後のローカル変数str="+str);
}
の通りですね。宣言がvar str;
alert("代入する前のローカル変数str="+str);
str="おおきに";
alert("代入した後のローカル変数str="+str);
}
var str;
で、代入がstr="おおきに";
です。
投稿:竹形 誠司[takegata]/2008年 05月 29日 16時 07分
/更新:2008年 05月 29日 16時 07分
ようやく把握することができました。
”宣言だけ”ということでしたか。
てっきり代入の部分も繰り上がるのかと勘違いしていました。
とてもスッキリしました。
丁寧にお答えいただき、ありがとうございました。
”宣言だけ”ということでしたか。
てっきり代入の部分も繰り上がるのかと勘違いしていました。
とてもスッキリしました。
丁寧にお答えいただき、ありがとうございました。
投稿:じゃじー[retro]/2008年 05月 29日 16時 09分
/更新:2008年 05月 29日 16時 12分
どういたしまして、
他にも疑問点がありましたら、いつでもご質問ください。
他にも疑問点がありましたら、いつでもご質問ください。
投稿:竹形 誠司[takegata]/2008年 05月 29日 16時 13分
/更新:2008年 05月 29日 16時 14分