• ベストアンサー

変数について

<scitp>の中(関数の中じゃない)で初期化した変数は、 ほかの<script>の中でも有効で var x;と宣言しても有効。 関数の中で初期化した変数は同じ<script>の中ならどの関数にも有効で、 var x;と変数宣言した場合は、その関数の中でのみ有効。 この解釈で正しいですか?

noname#12205
noname#12205

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

その解釈で正しいです。 ちょっと補足しておくと、 関数の外で定義された変数はグローバル変数(全域で参照できる)として定義されます。 関数の中で定義された変数は、その関数の中で参照できます。 (Cとかとは違ってブロック{}は関係ありません) 関数内でvar を指定しない(定義しない)変数は、 関数の外で、グローバルに定義されているものとして扱われます(ので全域で参照できます)

関連するQ&A

  • JavaScriptの変数について

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

  • 変数の宣言をグローバルにしないと変数の参照が出来ま

    変数の宣言をグローバルにしないと変数の参照が出来ません。 ソース全体はカプセル化のために即時関数で囲っています。 function found内で小数点第三位までで四捨五入するようにする処理が共通なので関数化したのですが、 var gramNumを外で宣言しないと参照できずにgramNumが定義されていないと出てしまい困りました 関数スコープの影響だと思い宣言を外に出したのですが、それでも定義されていないと出て、 最終的にグローバル変数にしてやっとうまくいきました。 スコープは自分より上のスコープの変数は参照できるようですが if(xGramEmptyFlag === true) {ないの式がroundの上にあるvar gramNumを参照する場合、 if分の中にある式の一つ上のスコープなので参照できると思ったのですがなぜできないのでしょうか? varはブロックスコープがないので一つ上ではなく同じスコープにあることになるのでしょうか? ただその場合も同じスコープの変数は参照できるのではないのでしょうか?

  • PHPにおいて変数の初期化

    PHPで変数を初期化する際の初期化の方法について質問です。 私はPHPで変数を初期化するさい、視認しやすい様にsettype関数を用いることが おおいです。 単純に $hoge = array(); $foo = ""; $hoo = 1; とするより settype($hoge,"array"); とした方が、明確に 「ああ。この変数はこの行数で初めてでてきたんだな」 という具合に判断できるとおもっているからです。 例えばJSだと var hoge; という具合に、変数そのものの宣言を先んじておこなえますよね。 このように明確な変数宣言がわかりやすいとおもうのですが・・・・。 みなさまがたはPHPではどのように変数を初期化しますか? ご意見おきかせください。

    • 締切済み
    • PHP
  • 変数宣言の var は必ずつけるものなのでしょうか

    ・関数の外で変数宣言する場合、「varありなし」で違いはあるでしょうか? ・変数宣言の var は必ずつけるものでしょうか? 理由も教えてください ・コーディング規約等に明記してどちらかに統一する類のものでしょうか? あるいは「暗黙の了解」というか「常識の範囲」の話になるのでしょうか?

  • 以下の変数は参照できないと、ルールとして記載がある

    jQueryをサイト制作に導入したいのですが、 AJAX系は使わない。 以下の変数は参照できないと、ルールとして記載がある場合があります。 'eval' 'alert' 'confirm' 'prompt' 'pbcd' jQuery' 上記の変数とは、初期から設定されている変数ということでよろしいでしょうか? 例えば下記のようなソースがあった場合、下記の場合のjQueryは変数ではなくjQueryを使っているという宣言なので、問題なくvar=jQueryなどvar=の後に上記の初期から設定されている変数を使わず、プラグインなら、ソースを検索で検索してvar=の後に上記の初期から設定されている変数がなければ問題ないということでよろしいでしょうか? jQuery("h1").click(function(){ jQuery("h1").animate({ backgroundColor: "#abcdef" }, 1500 ); }); 次にAJAX系を使っているかどうかは、プラグインのソースに下記のように、AJAXを読み込んでいる情報がなければ、使っていないと判断できるでしょうか? <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>

    • ベストアンサー
    • AJAX
  • 変数と関数の使い方について質問です。

    変数と関数の使い方について質問です。 現在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になります。 なぜでしょうか?変数は関数の外でまとめてしても良いのではないのでしょうか?? この考え方自体が間違いでしょうか? バカな質問だとは思いますが、よろしくお願いいたします。

  • 変数はグローバルなんですか?

    初心者です。 関数sub xxx{  $abc=10; } 関数sub yyy{  $def=$abc } というように、関数xxxで宣言した変数もPerlでは 関数yyy内で参照できるのでしょうか。つまり、同じ ファイルにあれば関数内で宣言してもグローバル 変数として使用されるのでしょうか。 (my変数は除きます)

    • ベストアンサー
    • Perl
  • jqueryのグローバル変数とローカル変数

    知識のある方に教えて頂きたいことがございます。 jqueryを何気なく組んでいたもので、基礎的なことがわかっておらず ご教示頂きたいのですが、 下記に記述した変数の(1)~(6)をどれが グローバル変数で、どれがローカル変数なのかご教示いただけますでしょうか。 関数の中は全てローカル変数になるという事を聞いたので、(3)と(4)はローカル変数、 プラグイン自体関数なので、(5)と(6)はローカル変数 (1)と(2)はグローバル変数だと考えておりますが、あっていますでしょうか。 どうかよろしくお願い致します。 $(function(){ var a = 0;//(1) b = 0;//(2) function Kansu(){ var c = 0;//(3) a = 1;//(4) } }) /* ----------------------------------------- */ (function($){ $.fn.testPlugin = function(options){ var d = 0;//(5) e = 0;//(6) } });

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

    今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; が成り立つのもよく分かりません。 そこでアドバイスを頂きたくここに書き込む事にしました。 是非とも宜しくお願い致します。

  • 変数宣言は、最初に全部列挙したほうがいいですか?

    100行ぐらいのスクリプトだと、10個ぐらい変数宣言しなければいけませんが、 最初にまとめて書くメリットを教えてください。 ※他人のコードを読んでいて、最初にすべての変数宣言があったら、最初に戻らないとわからなくなり、その時、その時に、変数宣言があったほうがいいかなと。 ※言語によって違ってきますが、例えばJAVASCRIPTだとグローバル関数とローカルの問題があります。そのようなことを踏まえて、ご経験、ご意見を教えてください。

専門家に質問してみよう