人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JavaScriptでグローバル変数のスコープについて質問です

関数の中でグローバル変数を宣言する場合、
スコープで外からはアクセスできないですが、
他の使い方があるのでしょうか?

<script type="text/javascript">
function check() {
x = 1;
}

document.write(x);
</script>


●質問者: pochi1234
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:JavaScript Write アクセス グローバル変数 スコープ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● Km1967
●20ポイント

http://rfs.jp/sb/javascript/01/04.html

変数には『グローバル変数』と『ローカル変数』があります。どこからでも参照することが可能な変数をグローバル変数、有効な範囲を決められている変数をローカル変数と呼びます。JavaScriptでは、関数内で var を付けて変数宣言すると、その変数はローカル変数となり、var を付けない場合はすべてグローバル変数になります。

変数の宣言は必ずしも必要ではありません。ただし、使用する前に変数を宣言しておくのがよいプログラミング作法とされています。変数の宣言にはvarステートメントを使用します。

javascriptは宣言無しで変数を使えるから無知か手抜きのどちらかだろう。

◎質問者からの返答

そんな簡単なことではなくて、関数の中でグローバル変数を使う必要性が知りたいのです。


2 ● ホーエンハイム
●20ポイント

スコープで外からはアクセスできないですが、

この文言の意味がよく分かりません。

たとえば下記のようなスクリプトであれば、x+2の結果がきちんと表示されます。

<script type="text/javascript">
function check() {
 x = 1;
}
check();
document.write(x + 2);
</script>

http://rfs.jp/sb/javascript/01/04.html

◎質問者からの返答

関数の中でグローバル変数を使う必要性がないと言うことなのでしょうか?

関数内でグローバル変数にしても、ローカル変数と同じじゃないのかということです


3 ● Km1967
●20ポイント ベストアンサー

グローバルかローカルかで内部的には扱いが変わってくるのだが、表向きではあまり変わらんのがjavascriptのグローバル変数とローカル変数。極端な話だが利用者がルーチン内でvar宣言したものがローカルとして区別されるだけと考えても良いだろう。

http://www.atmarkit.co.jp/fdotnet/ajaxjs/ajaxjs03/ajaxjs03_03.ht...


だが、ひとたびルーチン内でローカル宣言せずに変数を使ってしまえばグローバルと値が混在してしまうなどの恐れがあるからして、ルーチン内でのvar宣言は基本的に必須事項となる。宣言せぬのは無知か(宣言せずとも混乱せぬ場合の)手抜きだと言う事。

コードの再利用なども考えずに何かトリッキーな事(関数を通った時だけ変数が存在するとかだが、用途が浮かばん)でもやろうとしていない限りは必要性などない。ルーチン内でグローバル変数を利用するなとは誰も言わぬが混乱の元だ。

◎質問者からの返答

なるほど!とてもわかりやすい説明ありがとうございました。

関数内では混乱を避けるため、グローバル変数を宣言しないようにします。


4 ● ホーエンハイム
●20ポイント

関数内でグローバル変数にしても、ローカル変数と同じじゃないのかということです

No.2で回答した者です。

No.2の回答をもう一度ご覧下さい。

関数内でグローバル変数を定義し、関数外でそれを参照しています。

グローバル変数だからこういうことができるわけです。関数内ローカル変数とは違います。

http://q.hatena.ne.jp/1268990817#a1001797

◎質問者からの返答

失礼しました。

グローバル変数にアクセスできていますね。


5 ● ko8820
●20ポイント

>そんな簡単なことではなくて、関数の中でグローバル変数を使う必要性が知りたいのです。

スクリプトだからですね。

グローバル変数使うほうが速度も速いし、スタック(メモリー)も使わないし

構文解析も簡単だしということです。

プログラム的にみれば、あまり良い書き方ではないですが

所詮、スクリプトという位置づけなので。

>関数内でグローバル変数にしても、ローカル変数と同じじゃないのかということです

Ajaxとかその他もろもろのように、Javascriptがこんなにハードに使われることを

設計時(実装時)は考慮してなかったということですね。

またスクリプトなので、インタープリタ的に動作するので、同じではないですね。

http://q.hatena.ne.jp/answer

◎質問者からの返答

わかりやすい説明ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ