- ベストアンサー
【VBScript】変数のスコープ
変数のスコープについて詳しく教えて下さい。 どこで宣言すれば、どこまで有効か知りたい。 条件分岐やループ、ファンクション等でのスコープが分かりません。 特に、ファンクションの中のファンクションとかです。 参考サイトやヒントだけでも良いので教えて下さい。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- Javascriptのスコープについて。
私は何か大きな勘違いをしているでしょうか? for(var i=0; i<10; i++){ for(var i=0; i<10; i++){ alert(i); } } 単純なこのサンプルで、ループは総計100回回るはずだと思うのですが、 外側ループのローカル変数であるiが、なぜか内側ループのローカル変数iと同一視され、 結果10回しか回りません。 どこがおかしいでしょうか。 比較対象として、以下を実行しました。 var i=3; (function(){ var i = 2; alert(i); })(); alert(i); 結果は2, 3となりました。 スコープは機能しています。 前者はfor文だからおかしくなったのでしょうか? ・・・while文で書き下すと、あ、for文の()中で宣言するカウンタ変数というのは、該当for文のスコープの外に出ちゃっているんですね・・・。 つまり、for(var i・・・)と宣言したカウンタ変数のスコープは、for(){}のスコープではなく、その一個外に所属すると。。 こういう解釈でよいのでしょうか?よろしくお願い致します。m(_ _)m var i=0; while(i<10){ var i=0; while(i<10){ alert(i); i++; } i++; }
- ベストアンサー
- JavaScript
- C#での変数スコープ?
Net 2.0のC#で同一名の変数を使う場合について質問いたします。 以下のHoge1の場合には「 ローカルの変数 'x' をこのスコープで宣言することはできません。これは、'親またはカレント' スコープで別の意味を持つ 'x' の意味が変更されるのを避けるためです。」と怒られます。 一方、Hoge2の場合には怒られません。 Hoge2内でx=1;ではなくint x=1;と再宣言しているにもかかわらず怒られないのは、Hoge1が厳格にスコープ管理している点からみると意外に感じられます。 http://www.atmarkit.co.jp/ait/articles/0210/16/news001_5.html の記述を見ると、この記事が書かれた2002年ごろにはHoge2もNGだったような印象を受けるのですが、変化があったのでしょうか? この辺りの事情に詳しい方がおられましたらよろしく、お願い申し上げます。 class Class1 { private void Hoge1() { int x; { int x = 2; // これはNG!。「ローカルの変数 'x' をこのスコープで宣言することはできません。これは、'親またはカレント' スコープで別の意味を持つ 'x' の意味が変更されるのを避けるためです。」と怒られる。 } } int x; private static void Hoge2() { int x=1; //これはOK!親にぶらさげた変数が通る。 } }
- ベストアンサー
- C・C++・C#
- javascriptのレキシカルスコープについて
JSのレキシカルスコープがわかりません。 JSだと、一番外側のスコープで var str = "一番外側のスコープ"; とすると それ以降、ユーザー定義関数の中の、いわゆる関数スコープ内でも var str; と関数内で再定義しない限り、str = "一番外側のスコープ";を つかいまわすことになりますよね? 一度、関数内で、値を変更すると親スコープでもその変更が生きたままになると思います。 var str ="一番外側のスコープ"; function test(){ alert(str); str ="値の変更"; } alert(str) // 関数内で値をかえたけど、それが親スコープにも反映されてしまう。 このことがレキシカルスコープでしょうか? ただ、どこかのサイトで var num = 100; function makefunc() { return function() { alert(num); } } function callfunc() { var num = 50; var func = makefunc(); func(); }; callfunc(); でmakefunc()関数を呼び出した際の 関数内のnumという変数の値が100になるというのです。 実際、実行するとその通りなのですが、 var num = 50; という宣言は、callfunc() という関数の関数スコープ(ローカルスコープ) というのは理解しています。 でその中のいわゆる内部関数というのでしょうか? var func = makefunc(); func(); を実行した際の 変数numというスコープが 一番最初に宣言した var num = 100; という値をさすというのです。(※そのサイトではこれをレキシカルスコープと呼んでいました) いったどういう動作がレキシカルスコープなのでしょうか? 他にも、クロージャともごっちゃになっております。 識者の方ご教授ください。 参考元はここです http://garden-place.jp/tech/javascript/scope-chain.html
- ベストアンサー
- JavaScript
- 変数の宣言をグローバルにしないと変数の参照が出来ま
変数の宣言をグローバルにしないと変数の参照が出来ません。 ソース全体はカプセル化のために即時関数で囲っています。 function found内で小数点第三位までで四捨五入するようにする処理が共通なので関数化したのですが、 var gramNumを外で宣言しないと参照できずにgramNumが定義されていないと出てしまい困りました 関数スコープの影響だと思い宣言を外に出したのですが、それでも定義されていないと出て、 最終的にグローバル変数にしてやっとうまくいきました。 スコープは自分より上のスコープの変数は参照できるようですが if(xGramEmptyFlag === true) {ないの式がroundの上にあるvar gramNumを参照する場合、 if分の中にある式の一つ上のスコープなので参照できると思ったのですがなぜできないのでしょうか? varはブロックスコープがないので一つ上ではなく同じスコープにあることになるのでしょうか? ただその場合も同じスコープの変数は参照できるのではないのでしょうか?
- ベストアンサー
- JavaScript
- return の中はローカルスコープ?
return 範囲内における、ローカル / グローバルスコープについて教えてください ■質問 ・returnするまではローカル変数? ・returnしたらグローバル変数? ・それとも、「return の中」というスコープは存在しない? ■例1 (function(){ return{ //ローカルスコープ? //ここで定義した変数はローカル変数? } })(); ■例2 (function(){ return{ hoge : (function(){ //ローカルスコープ? //ここで定義した変数はローカル変数? })() }; })();
- 締切済み
- JavaScript
- スコープ内の処理終了次第変数の中身が捨てられる
スコープ内の処理終了次第変数の中身が捨てられるので、困ります。 フラグが使えません。 グローバルで宣言するとできるのですが、こんなに離れている管理しにくくないですか? もっと近くで残すことは仕様上できないのでしょうか? グローバル var emptyElement; これはずっと残っているグローバルは中身がスコープ内の処理が終わってもずっとリロードするまで残る仕様??? 即時関数内下 var emptyElement; クリック終了次第中にが捨てられる aaa.addEventListener('click', function() { emptyElement = true; } });
- ベストアンサー
- JavaScript
- ファイル飛び越えてスコープは不可能ですか?
aaa.accdbとbbb.accdbがあり bbb.accdbに変数の宣言と言うモジュールを作り、 aaa.accdbから bbb.accdbへ変数の宣言を参照することは可能ですか? publicで宣言をしても ファイル飛び越えてスコープは不可能ですか?
- ベストアンサー
- その他MS Office製品
- エクセルVBAでの変数のスコープ
基本的なことなのですが、教えて下さい。 当方、PHPやjavascriptを中心にプログラムしてきたのですが、 今回、エクセル+VBAでプログラムすることになり、VBAを勉強しているところなのですが、ちょっと戸惑っています。 いままでは、グローバル変数をなるべく使わないように、プログラミングをしてきたのですが、 VBAの勉強で、参考にしている本のコードは、全てグローバル変数を使っています。 そもそも、エクセルのシート・セルがグローバル変数のようなもの(?)なので、変数のスコープにこだわってもあまり意味がないのかな?とも思います。 エクセル+VBAである程度の規模のプログラムを作る際、 変数のスコープはどのように使い分けるのが良いのでしょうか? すみませんが、ご教授の程、よろしくお願いします。
- ベストアンサー
- Visual Basic
- スコープについて
PHPの変数スコープでは、global変数をglobalキーワードを使って、localに持ち込むことや、$GLOBALSを利用して呼び込むことができますが、local変数を関数の外(つまりglobal変数として)に持ち出すにはどうしたらよいのでしょうか? <? function example() { //なんらかの処理 $flag = 1; //なんらかの処理 } echo $flag; ?> これだと駄目なんですよね? returnで返す値にはその他のものが入っていて、一部のローカル変数のみを一時的にグローバル化したい…と思っています。 よろしくお願いします。
- ベストアンサー
- PHP