竹形誠司 ブログ
ご質問    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
JavaScriptの変数
by じゃじー[retro]
「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が表示されます。

ご教授、宜しくお願いいたします。
投稿:じゃじー[retro]/2008年 05月 29日 14時 07分 /更新:2008年 05月 29日 14時 12分
RE:JavaScriptの変数
by 竹形 誠司[takegata]
竹形です。こんにちは。

>test2()でのstrには、どちらも"おおきに"が入るのではないのでしょうか?

最初のalertが呼ばれた時点では、strの宣言だけが行われていて、代入は行われていません。そのため、undefinedになるのです。

と、本文に書いておけばよかったですね。説明が足りなくてすみません。
投稿:竹形 誠司[takegata]/2008年 05月 29日 15時 29分 /更新:2008年 05月 29日 15時 30分
RE:JavaScriptの変数
by じゃじー[retro]
さっそくの回答ありがとうございます。
ですが、やはり釈然としません。

>最初のalertが呼ばれた時点では、strの宣言だけが行われていて、代入は行われていません。



>>関数の中でvarを使って変数を宣言すると、それがどのような場所であっても、その関数の先頭で宣言されたものとみなされる。

の関係がどうも・・・。

function test2(){
    alert("代入する前のローカル変数str="+str);
    var str="おおきに";
    alert("代入した後のローカル変数str="+str);
}
ここでstrを宣言しているのは、var str="おおきに"; にあたるのではないのでしょうか?
alertの中にある+strのstrが宣言になっているということでしょうか。

それとも、
function test2(){
  var str;
    alert("代入する前のローカル変数str="+str);
    str="おおきに";
    alert("代入した後のローカル変数str="+str);
}
こういう考え方で合っていますか?

基本的なところで、お手数をお掛けしますが、宜しくお願いいたします。
投稿:じゃじー[retro]/2008年 05月 29日 15時 40分 /更新:2008年 05月 29日 15時 45分
RE:JavaScriptの変数
by 竹形 誠司[takegata]
まさに、
function test2(){
  var str;
    alert("代入する前のローカル変数str="+str);
    str="おおきに";
    alert("代入した後のローカル変数str="+str);
}
の通りですね。宣言が
var str;
で、代入が
str="おおきに";
です。
投稿:竹形 誠司[takegata]/2008年 05月 29日 16時 07分 /更新:2008年 05月 29日 16時 07分
RE:JavaScriptの変数
by じゃじー[retro]
ようやく把握することができました。
”宣言だけ”ということでしたか。
てっきり代入の部分も繰り上がるのかと勘違いしていました。

とてもスッキリしました。

丁寧にお答えいただき、ありがとうございました。
投稿:じゃじー[retro]/2008年 05月 29日 16時 09分 /更新:2008年 05月 29日 16時 12分
RE:JavaScriptの変数
by 竹形 誠司[takegata]
どういたしまして、
他にも疑問点がありましたら、いつでもご質問ください。
投稿:竹形 誠司[takegata]/2008年 05月 29日 16時 13分 /更新:2008年 05月 29日 16時 14分