varとは?逆に言うとvarって何?

このQ&Aのポイント
  • varとは、JavaScriptで変数を宣言するためのキーワードです。
  • varを使用することで、function内の変数をローカル変数として定義できます。
  • varを使うことで、変数名の重複を防ぐことができます。
回答を見る
  • ベストアンサー

varとは

http://www.1art.jp/flash2/chapter/36/36.htmhttp://oshige.com/flash/note/archives/2005/02/post_23.html などを参考に今、「配列」について勉強しています。 上記HPを見ていると、varが頻繁に出てきます。 とあるHPではvarの解説として「function内の変数に「var」をつけると、ローカル変数となり、functionの中だけで使える変数になる。functionを抜けると「var」のついた変数は無効となり、変数名が余計に増える事を防げる。」「よく分からなくても、functionの中だけで使い、functionを抜けるといらなくなる変数には、varをつけて定義すると覚えておけばよい」と書かれていてそういうものと思っていたのですが、そういうものでもないのかな??とvarって何? という感じでいます。 varとはどの様に使用すべきものなのでしょうか? 解説や参考HPなどありましたら書き込みをいただけたらと思います。 よろしくお願いします。

  • Flash
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

関数外で定義する変数に var を付けると、ActionScript 2.0 から採用された”変数の型の明示”を利用できるようになります。 例えば  var a:String = "str"; このように” : ”に続けて現在定義されているクラス名を書くと、その変数が何のデータを持っているかを明示することができます。 var を付けずに  a:String = "str"; と宣言すると、これはシンタックスエラーになります。 型の明示は String や Array に限らず、定義されているクラスであれば何でも構いません。 var が使える対象も同じです。 これだけですとあまりありがたみがないのですが、関数と一緒に使うと、関数が要求する型と呼び出す際の引数の型が一致しているかどうかを、コンパイル時にチェックしてくれるようになります。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  /*数値を+1する関数*/  function Calc( num:Number )  {   var calc_result:Number;   calc_result = num + 1;   trace( calc_result );  }  //変数を作って関数を呼び出す  var a:String = "1";  Calc( a ); ↑この例では、関数 Calc は Number 型(いわゆる数値)を引数として受け取る設計になっています。 しかし、関数を呼び出す時に渡している変数 a は String 型(文字列)です。 従ってこの場合は、「パブリッシュ」または「ムービープレビュー」の際に「型が一致しない」とのエラーが報告されます。 *********************************** 変数の型はC言語などのコンパイラではとてもうるさいのですが、ActionScript はかなりズボラです。 型の一致を厳しくチェックしてもらいたいのなら、変数と関数の仮引数部分の両方で型を明示しなければなりません。 型の明示は ActionScript 2.0 から採用されたものなので、2.0 でパブリッシュしてください。 例えば先の例で、  a = "1";  Calc( a ); このように変数 a の型を明示せずに宣言して関数に渡すと、Calc が要求する型と一致していなくてもエラーになりませんし、関数も実行されます。 ただし、実行結果が期待通りにはなりません。 Calc 関数は「渡されてきた”数値”に 1 加算する」という動作を期待して作ったものです。 ところが、実際に渡されてきたものは数値ではなく文字列だったために、数値の 2 にならず” 11 ”と文字列が連結されるという結果になります。 変数の方で型を明示しても、関数側で明示されていない場合も同様です。 関数 Calc の宣言部分が  function Calc( num ) ↑このように引数の型が明示されていなかったら、var と型の明示を使って宣言した変数 a を渡しても型のチェックが行われません。 渡されてきた a に入っているものが数値ならば問題はありませんが、文字列だった場合は文字列の演算として処理されてしまいます。 ----------------------------------------------------------------- 関数内で var を付けて定義した変数はローカル変数といって、その関数の中だけで使える変数になります。 冒頭の例に出てきた関数 Calc 内にある変数 calc_result は、関数内で var を付けて宣言しているのでローカル変数です。 ローカル変数は関数実行時に作成され、関数が終了すると消えてしまいます。 ですから、calc_result を関数の外で利用しようとすると undefined (未定義)になります。 関数内でローカル変数を定義する var の使い方は、ActionScript 1.0 の頃( Flash Player 5 )からありました。 関数の外で定義する変数の場合は、型の明示と型の一致をチェックする機能を利用しないのなら var を付けてもあまり意味がありません。 つまり  var a = "str"; のように、”変数の前に必ず var を付けるものだ”とおまじないとして使っているだけではダメです。 ご提示のページでも、var を使って宣言した変数には必ず型の明示も付いています。 変数の型と関数を宣言する時に引数の型を明示して初めて、関数外で使う var は真価を発揮するのです。 ちなみに、外部 as ファイルでクラスを定義する時、プロパティを宣言する場合は必ず var を付けなければならない決まりがあります。

thank001
質問者

お礼

ありがとうございました。 詳しく解説をいただき、大分理解できてきました。 ありがとうございました(^^).

その他の回答 (1)

回答No.1

俺はActionScriptやJavascriptに慣れている人間ではないため,保証は出来ないが,その説明が正しいなら・・・ 少し脱線して「名前空間」の話を見てもらうことにしよう http://ja.wikipedia.org/wiki/%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93 神奈川県の横浜市の山田家の一郎・・・A 神奈川県の横浜市の佐藤家の一郎・・・B 神奈川県の横浜市の市役所・・・C AとBとの間の合意: 「市役所は神奈川県の横浜市の市役所だ」・・・山田家にとっても佐藤家にとっても「市役所」という同じ名称で通じる。・・・・グローバル変数 山田家(関数) 「一郎は神奈川県の横浜市の山田家の一郎だ」・・・山田家(スコープ)のローカル変数 「一郎」 佐藤家(関数) 「一郎は神奈川県の横浜市の佐藤家の一郎だ」・・・佐藤家(スコープ)のローカル変数 「一郎」 ※本当はもうちょい複雑。グローバル変数には無名の名前空間とかの話が絡むと思うから・・・。メンバ変数とかのために「神奈川県」「横浜市」と長くしている

関連するQ&A

  • セッション変数と配列

    通常の変数であれば、 $var = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); ですが、セッション変数を配列にするにはどうしたら良いのでしょう? (配列から取り出す方法も含め) $var = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); $_SESSION["$var"]; や $_SESSION["$var"] = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); としてみましたが、ダメなんですね。 よろしくお願いいたします。 *PHPバージョンは5です

    • ベストアンサー
    • PHP
  • ParaFla ActionScript でcgiデータ送受信したい

    ParaFlaのActionSciptでcgiデータ送受信したいです。 http://www.1art.jp/flash2/chapter/49/49.htm 上記を参考にLoadVars.sendAndLoad()メソッドの使用を試みたのですが、 var send_lv: LoadVars = new LoadVars(); 上記の記述で構文エラーになってしまいます。ParaFlaでは:(コロン)が通用しないのでしょうか。 ParaFlaのActionSciptからcgiを呼び出す(http通信)するにはどうしたらよいでしょうか?

    • ベストアンサー
    • Flash
  • 【AS3.0】外部テキストから配列を読み込む

    fla→PHPに変数・配列のデータを送り、 下記のようなテキストデータを.txtファイルに出力するものを作りました。 var1=1&var2=0&array1=1,2,3&array2=1,2,3,4&array3=1,2,3,4,5 送られた変数・配列はすべて連なっており、&で区切られています。 変数を読み込むには下記で出来るようですが、 参考URL:http://ninotk.oops.jp/weblog/?p=30 private var filePath:String = "topics.txt"; private var tpcLoader:URLLoader; init(); function init(){ tpcLoader = new URLLoader(); tpcLoader.dataFormat = URLLoaderDataFormat.VARIABLES; tpcLoader.addEventListener(Event.COMPLETE,onComplete); tpcLoader.load(new URLRequest(filePath)); } private function onComplete(evt:Event):void{ var src:String = evt.target.data; var vars:URLVariables = new URLVariables(src); contents.topics._date.text = vars.date; contents.topics._txt.text = vars.news; } 配列を読み込む手順がどうしても分かりませんでした... さらに上記のような変数・配列混合での読み込みは可能でしょうか。 もし不可能のようでしたら、変数のみのtxtと配列のみのtxtとで分けての出力も可能です。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • 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) } });

  • 「?」と「:」の意味。

    アプレットを勉強している初心者です。 javaのコードの中で「?」や「:」というのはどういった意味なのでしょうか?「?」などは検索でも無視されるらしく(?)解説されてそうなページが出てきません。 今私が勉強として読んでいるコードは下記のサイトの下から3番目の「ラインアートjavaアプレット」です。 一応使い方としては kr[i][k] = (kr[i][k]>MZ)?kr[i][k]-MX:0 という風に使っているようです。(krはintの配列。i、kはカウンターの変数。MZは28です。 よろしくお願いします。 http://hp.vector.co.jp/authors/VA012735/applet/applets.htm

    • ベストアンサー
    • Java
  • ajaxでPOSTする変数の変数名を動的に変えたい

    ajaxでPOSTする変数の変数名を動的に変えたいのですが、方法が分かりません。 unction Addnt(num){ var pnum = $("#p"+num).val(); var num = num; $.ajax({ type: "POST", url: "addnt.php", data: {"'p'+num+":pnum,"num":num}, dataType: "json", success: function(data, status){ }, error: function(XMLHttpRequest, status, errorThrown){ alert("入力をご確認ください。"); } }); } と言う風に data: {"'p'+num+":pnum,"num":num}, としたのですがうまくいきません。 p+numのkeyでpostしたいのです。 PHP側でどのように飛んだか確認する方法ってないですよね・・・。 よろしくお願いします。

  • function

    http://www.1art.jp/flash/le/lesson31/lesson31.htm 上記HPの下記のfunctionについては、理解はできたつもりです。 function funcName() { trace("funcName();がここで呼び出されました。"); } 例えば function F_tasizan(num1, num2) { A = num1+num2; } F_tasizan(1,2); trace(A); といった具合に、以後定義したF_tasizan( , )と書くだけで二つの数字が足し算されるし、他の式で書けばその式にしたがった答えをF_tasizanで簡単に求められるということですよね。 しかし、2例目の myMc_mc.onEnterFrame = function() { myMc_mc._x += 1; } の = function()が理解できません。myMc_mc.onEnterFrame という部分については イベントハンドラメソッド であり他のサイトなども参考に分かった気がするのですが、 = function()が上手く理解できません。というよりこれは単にお約束という形で1つ目の例とは全く関連しないものなのでしょうか? ご教授いただきたく思います。よろしくお願いします。

    • ベストアンサー
    • Flash
  • Ajax以外で、JavaScriptからPHPへ渡

    Ajax通信以外で、JavaScriptからPHPへ変数(配列)を渡したいのですが、 可能でしょうか? 下記のような状態の時、js変数dataを、Ajax通信を利用せずにPHP変数として取得したいのですが、どうすればよいでしょうか? JavaScript関数の中で、PHPフォームの送信ボタンをクリックさせる(ような)ことは出来ないのでしょうか? <button type="button" onclick="testsubmit();">送信</button> <script> function testsubmit(){  js処理;  var data = ★★; } </script> ■最終的にやりたいこと ・ボタンをクリックしたら、js処理で取得したjs変数(配列)を、Ajax通信を利用せずに、PHP変数として受け取りたい ・それを出来れば1クリックで処理したい

  • 空の配列を示す方法

    Flash8を使用して、ActionScript2を書いています。 if文を用いて、「変数my_array(配列)が空の配列でない場合は~」 という条件分岐を書きたいのですが、 空の配列を示す方法がわかりません。 var my_array:Array = new Array(); とした上で、 if (my_array == null) { trace("null"); } else { trace("違う"); } と書いて調べてみたのですが、 nullでもundefinedでも""でも[]でも「違う」と表示されてしまいます。 「空の配列でない場合」という条件を書く方法はあるでしょうか?

    • ベストアンサー
    • Flash
  • HTML内でJavaScriptの変数を使いたい

    <script language="JavaScript"> <!-- function fnc_prompt(){ var msg; msg = window.prompt("URL",""); } //--> で、msgにURLを代入して、 <form action="&{msg};" method="post"> フォームタグ内でその変数を使いたいのですが可能でしょうか。 よろしくお願いします。

専門家に質問してみよう