• ベストアンサー

関数やら変数やら初歩的な質問

気になる点があるので、良かったらご教授願います。 (1)「function 名前()}」のように関数化されたデータというのは、 名前を呼び出されるまではデータは保持しないのでしょうか? 例えば名前を出す前にそこのデータを参照するということは出来ないのでしょうか? function a(){ aa=1;} document.write(aa); (2)ローカル変数とグローバル変数の適用範囲がいまいち把握出来ないのですが、 ローカル変数は宣言しなければ機能しないのでしょうか?それともブラウザの仕様などにもよるのでしょうか? グローバル変数は<script language="JavaScript">・・・</script>~ <script language="JavaScript">・・・</script>間なども問わず機能するものなのでしょうか? 分かりづらい点などあると思いますが、回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

JavaScriptではvarが省略された場合、その変数はグローバル変数と見なされます。関数内でvar宣言するとそのスコープはその関数全体になります。 <script>タグがある位置は関係ありません。 他の言語のようにブロック・レベルのスコープはありません。 ローカル、グローバルにかかわらず値(又は参照)を代入されるまで、 データは保存(アドレス確保)されません。undefineです。 (1)の function a(){ aa=1;} document.write(aa); では、aaはグローバルスコープになっていますが、 a()が実行されていないのでundefineです。 a(); document.write(aa); とするかaaが保持されます。 関数内のローカルな変数にアクセスするには、 クラス化(オブジェクト化)して var aa; aa = 2 function a(){ this.aa=1; } document.write(aa);  // 2 var b = new a(); document.write(b.aa);  // 1 としてアクセスできます。 このあたりまでは、基本なのでわかりやすいですが、配列変数とか 匿名関数、高階関数、クロージャ-だのが絡んでくると複雑怪奇 になります。 参考URLが結構わかりやすいですよ。

参考URL:
http://www.atmarkit.co.jp/fdotnet/ajaxjs/index/index.html
mitu77
質問者

お礼

回答ありがとうございます。遅れてすいません。 とても詳細で分かりやすい回答、参考になりました。 回答ありがとうございました。

その他の回答 (1)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.2

(1) >名前を呼び出されるまではデータは保持しないのでしょうか? はい。 >例えば名前を出す前にそこのデータを参照するということは出来ないのでしょうか? グローバル変数として値を代入すれば、その後使えるようになります。 (2) >ローカル変数とグローバル変数の適用範囲がいまいち把握出来ないのですが、 おそらく var をつける習慣がないと、そのような事態に陥るかと思います。JavaScript では、var で宣言された変数はローカルとして、つけずに使用された変数はグローバルとして扱われます。 function test( ) { a = 1; // グローバル変数。test 外でも参照可 var b = 1; // ローカル変数。test 内でのみ参照可 } >それともブラウザの仕様などにもよるのでしょうか? Web 標準です。 http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/12_Statements.html#section-12.2 >グローバル変数は<script language="JavaScript">・・・</script>~ <script language="JavaScript">・・・</script>間なども問わず機能するものなのでしょうか? script 要素外では機能しません。 <script type="text/javascript"> の type="text/javascript" の部分は、要素の内容のメディアタイプの指定です。中身を javascirpt として読ませることを指定しています。(本当なら application/javascript が正しい)。それと同様に <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> の部分は、その文書のメディアタイプが html であるという指定です。 <script> の外は html 言語ですから、javascirpt 言語の変数は意味を持たないことになります。

mitu77
質問者

お礼

回答ありがとうございます。遅れてすいません。 分かりやすく参考になりました、疑問がすっきりしました。 それでは回答ありがとうございました。

関連するQ&A

  • 変数と関数の使い方について質問です。

    変数と関数の使い方について質問です。 現在JavaScriptを勉強しています。(超初心者ですのでバカな質問だと思いますがすみません)、変数を宣言して関数の中で使おうとしているのですが、うまく行きません。 以下のように書いて計算をしたいのですが。 <html lang="ja"> <head> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- var moneyin = document.form1.text1.value; var moneyout = document.form1.text2.value; function zandaka(){ document.form1.text3.value=moneyin-moneyout; } --> </script> <title>簡単計算機</title> </head> <body> <h1>簡単計算機</h1> <hr> <h2>収支計算</h2> <form name="form1"> <p>収入&nbsp;<input type="text" value="0" class="right" name="text1">円</p> <p>支出&nbsp;<input type="text" value="0" class="right" name="text2">円</p> <p>残高&nbsp;<input type="text" value="0" class="right" name="text3" onfocus="zandaka()">円</p> </form> </body> </html> 関数の中に変数の宣言をすればうまく行くのですが、関数の外で変数の宣言をすると結果がNaNになります。 なぜでしょうか?変数は関数の外でまとめてしても良いのではないのでしょうか?? この考え方自体が間違いでしょうか? バカな質問だとは思いますが、よろしくお願いいたします。

  • アラートの初歩的使いかた

    下記を改造したいのですがうまくいかず。 「やっほ」の部分をscript内でなくonclickのところに「やっほ」と書いてscriptの部分では変数として受け取って表示したいのですが。 質問がうまく通じるかも心配なレベルです。 <script language=javascript><!-- function test(){ alert("やっほ") } //--> </SCRIPT> <A HREF="javascript:function voi(){};voi()" onClick="test()">テスト</A>

  • 関数内のグローバル変数の参照について

    はじめまして。 質問があります。 まずは以下のコードを見てください。 ---------------------------------------------------------------- <html> <head> <title>関数内のグローバル変数について</title> <script type="text/javascript"> <!-- function func1() { a = "あああ"; } //--> </script> </head> <body> <script type="text/javascript"> <!-- func1(); // ---(1) document.write("a="+a+"<br>"); // ---(2) //--> </script> </body> </html> ---------------------------------------------------------------- 上記の(1)と(2)について、上記の順番で記述すると、文字列がブラウザに 出力されるのですが、(1)と(2)の記述順を入れ替えるとIE6.0もNetscape 7.1も「aは宣言されていません。」という内容のエラーが発生して ブラウザに文字列が表示されません。なぜこのようなエラーが発生する のでしょうか?ご教授お願いします。

  • グローバル変数とローカル変数について

    今JavaScriptを勉強している初心者です。 実は、ある本に書かれているソースコードでグローバル変数とローカル変数の違いがよく分からなくなりましてここに質問させて頂く次第です。 まずは、ソースコードを書きます。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <title>変数のスコープ</title> <script type="text/javascript"> function testFunc(){ var num; num=5; } </script> </head> <body bgcolor="#FFFFFF"> <p style="font-size:200%"> <script type="text/javascript"> var num=3; testFunc(); document.write(num, "<br>") </script> </p> </body> </html> このままだとブラウザに表示されるのはグローバル変数「3」になるというのも今一分からないのですが。 この次に<head>部分の var num; をコメントにします。 すると、何故かローカル変数「5」がグローバル変数になり、<body>部分のtestFunc()メソッドの結果ブラウザに表示される値が「5」になるというものです。 var num; をコメントとする事はnumは変数宣言されていないことになります。 なのに num = 5; が成り立つのもよく分かりません。 そこでアドバイスを頂きたくここに書き込む事にしました。 是非とも宜しくお願い致します。

  • JavaScriptの変数について

    JavaScriptのソースで解らないところがあり、困っています。 ソースは下記の様なものなのですが、エラーが出ていません。 解らない点は2点有ります。 1. jにfalseを代入している箇所なのですが、セミコロンがないのは何故なのでしょうか? Chromeのデベロッパツール, FireFoxのFirebugで確かめてみたのですが、エラーとなっておらず、alertでfalseと表示されている状態です。 「j = !1」の箇所を即時関数の外に出すと、エラーとなります。 普通変数に代入する式の末尾はセミコロンをつけると思うのですが、 何故なのでしょうか? 2.また、jはvar j等のように変数の宣言をせずに使えているようなのですが、 普通即時関数内で宣言した変数のスコープは関数の外では使えないので、エラーとなると思うのですが、宣言せずに代入に使った変数はグローバル変数と解釈されるのでしょうか? どなたかお答え下さい。 --------------------------------- <script> (function() { j = !1 })(); alert(j); </script>

  • JavaScript内にJavaScriptを読み込む方法

    HTML内に <script type=\"text/javascript\" src=\"main.js\"></script> という一行を追加すると、バナーが表示されるというスクリプトを作成しています。 main.jsは、 html = \'<script language=\"JavaScript\">\'; html += \'var url0101 = \"url01.xxx.jp\";\'; html += \'var url02 = \"url02.oooo.jp\";\'; html += \'</script>\'; html += \'<script language=\"JavaScript\" src=\"http://xxx.xxxx.xxx/test.js\"></script>\'); html += \'<script language=\"JavaScript\">\'; html += \'Function01(\"check\")\'; html += \'</script>\'; document.write(html); というような風になっており、 (1) 変数の宣言 ↓ (2) http://xxx.xxxx.xxx/test.jsの読み込み ↓ (3) (2)で読み込んだjs内の関数Function01を実行 という流れです。 FireFoxでは表示されましたが、IE6では (2)のjsを読み込む前に(3)のFunction01が実行され、 「オブジェクトを指定してください」のエラーが表示されてしまいます。 よい方法がありましたら教えていただけますでしょうか? よろしくお願いします。

  • JavaScript内にJavaScriptを読み込む方法

    HTML内に <script type="text/javascript" src="main.js"></script> という一行を追加すると、バナーが表示されるというスクリプトを作成しています。 main.jsは、 html = '<script language="JavaScript">'; html += 'var url0101 = "url01.xxx.jp";'; html += 'var url02 = "url02.oooo.jp";'; html += '</script>'; html += '<script language="JavaScript" src="http://xxx.xxxx.xxx/test.js"></script>'); html += '<script language="JavaScript">'; html += 'Function01("check")'; html += '</script>'; document.write(html); というような風になっており、 (1) 変数の宣言 ↓ (2) http://xxx.xxxx.xxx/test.jsの読み込み ↓ (3) (2)で読み込んだjs内の関数Function01を実行 という流れです。 FireFoxでは表示されましたが、IE6では (2)のjsを読み込む前に(3)のFunction01が実行され、 「オブジェクトを指定してください」のエラーが表示されてしまいます。 よい方法がありましたら教えていただけますでしょうか? よろしくお願いします。

  • 変数の宣言?

    以下のように変数の練習をしていたのですが、document.aaa.y.valueを右辺に持ってこないやり方っていうのはあるのでしょうか? また、ifの中身についてなのですが、一応これでも動くんですけど文法的にはどうなのでしょう?お願いします <html> <head> <title>変数の練習</title> <script language="JavaScript"> <!-- function test() { var x= document.aaa.y.value; document.aaa.y.value=x*1+1; if (document.aaa.y.value == "10") { document.aaa.y.value=0; } } //--> </script> </head> <body> <form name="aaa"> カウント:<input name = "y" value=0> <input type="button" value ="+1" onClick = "test()" > </form> </body> </html>

  • JAVAで得た結果の変数を、PHPで受け取りたい

    PHPの初心者です。 どなたか教えて下さい。お願いします。 下記のJAVAの記述の変数(selnendo)を、PHPで受け取り、($selnendo)に値を渡したいのですが、分かりません。 <?=$selnendo?> = var selnendo としましたが、駄目でした。 上記記述を削除すれば旨く表示だけはされます。 どなたか、宜しお願い致します。 ---------------------------------------------------------------- <SCRIPT LANGUAGE = 'JavaScript'> <!-- function GetSelect() { var i; i = document.selectform.nendo.selectedIndex; selnendo = document.selectform.nendo.options[i].value; alert ('年度は'+ selnendo); InitSelect(); } function InitSelect(){ document.selectform.nendo.selectedIndex = 0; } --> </SCRIPT>

    • 締切済み
    • PHP
  • 変数について

    まだ、JavaScriptをはじめて間もないのですが、JavaScriptの変数名についてどなたか教えてください。 それは、変数名で例えば function SUM(){ if(!isNaN(document.sum.text1.value)..... とあった場合に、「text1」というところに、2バイト系文字の漢字を使いたいのですが、なにか方法はないでしょうか?どんなに無理やりでもかまいません。よろしくお願いします。 それは、HTMLの<input type="text" name="名前">と使っており、変数名をどうしても漢字にしたいためです。

専門家に質問してみよう