アプリ版:「スタンプのみでお礼する」機能のリリースについて

気になる点があるので、良かったらご教授願います。

(1)「function 名前()}」のように関数化されたデータというのは、
名前を呼び出されるまではデータは保持しないのでしょうか?
例えば名前を出す前にそこのデータを参照するということは出来ないのでしょうか?
function a(){
aa=1;}
document.write(aa);

(2)ローカル変数とグローバル変数の適用範囲がいまいち把握出来ないのですが、
ローカル変数は宣言しなければ機能しないのでしょうか?それともブラウザの仕様などにもよるのでしょうか?
グローバル変数は<script language="JavaScript">・・・</script>~
<script language="JavaScript">・・・</script>間なども問わず機能するものなのでしょうか?

分かりづらい点などあると思いますが、回答よろしくお願いします。

A 回答 (2件)

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/i …
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/12 10:32

(1)


>名前を呼び出されるまではデータは保持しないのでしょうか?
はい。
>例えば名前を出す前にそこのデータを参照するということは出来ないのでしょうか?
グローバル変数として値を代入すれば、その後使えるようになります。

(2)
>ローカル変数とグローバル変数の適用範囲がいまいち把握出来ないのですが、
おそらく var をつける習慣がないと、そのような事態に陥るかと思います。JavaScript では、var で宣言された変数はローカルとして、つけずに使用された変数はグローバルとして扱われます。

function test( ) {
a = 1; // グローバル変数。test 外でも参照可
var b = 1; // ローカル変数。test 内でのみ参照可
}

>それともブラウザの仕様などにもよるのでしょうか?
Web 標準です。
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma26 …

>グローバル変数は<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 言語の変数は意味を持たないことになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/12 10:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!