• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:即時関数でプライベート変数的になってる理由を教えて)

即時関数でプライベート変数的になってる理由を教えて

このQ&Aのポイント
  • 即時関数内でプライベート変数的になる理由としては、変数のスコープが関数内に閉じられるためです。
  • 呼び出せない状態の時、hoge2はプライベート変数になります。
  • 即時関数は、名前もしくはスコープを作り、変数や関数をそのスコープの中で宣言することで、他のコードとの衝突を避けるために使用されます。

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

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.1

> ・どうして呼び出せないのでしょうか? functionの中にconsole.logを入れてみれば分かりますが 関数は呼び出せています。 hoge2が(関数の外では)未宣言なのでconsole.log(hoge2);が失敗しているだけです。 > ・呼び出せない状態の時、hoge2はプライベート変数になっているのでしょうか? 関数内でvarで変数宣言した場合は、 その変数のスコープは関数内になります。 varを付けなかった場合はグローバルスコープになります。 以下がvar有りと無しの違いを端的に示す例です。 (変数スコープの問題なので、即時呼び出しするかどうかは関係ないです。) ==================================================== function a (){ var hoge1 = "aaa"; //ローカル変数:スコープは関数a } function b (){ hoge2 = "bbb"; //グローバル変数:スコープはグローバル } console.log(typeof(hoge1)); //--> undefined console.log(typeof(hoge2)); //--> undefined a(); b(); console.log(typeof(hoge1)); //--> undefined console.log(typeof(hoge2)); //--> string ==================================================== この var を付け忘れるとグローバル変数を作ってしまうという仕様は 意図せずグローバル変数を作ってしまうミスに繋がるので気をつける必要があります。

re97
質問者

補足

回答ありがとうございました。 下記では、hoge2も var対象になるのでしょうか? var hoge1 = "aaa",hoge2 = "bbb";

その他の回答 (2)

回答No.3

ああ、ごめんなさい。 既に質問者さんは気づいておられますね。

re97
質問者

お礼

補足ありがとうございます ・回答いただいた内容のおかげで、勘違いに気が付くことが出来ました ・下手したらずっと勘違いしたままの可能性もあったわけで、大変勉強になりましたー

回答No.2

var hoge1 = {},hoge2 = 'ホゲ2'; では、function() 関数スコープ内で、 var hoge1 = {}; var hoge2 = 'ホゲ2'; という処理を行う意味合いになってしまいます。そういう事を質問しているのでは無いですか? ローカルなスコープで hoge2 を宣言してその変数の中に値を入れているので、当然ローカルな変数に入れられ、スコープから外れた場所で参照しても繋がりません。 console.log(hoge2); で参照している hoge2 は、何処にあるのか、その辺は、調べれば解ることだと思います。 恐らくちょっと勘違いが発生しているだけかと思います。 まあ、気持ちはわかります。

re97
質問者

お礼

回答ありがとうございました >var hoge1 = {},hoge2 = 'ホゲ2'; >では、function() 関数スコープ内で、 >var hoge1 = {}; >var hoge2 = 'ホゲ2' ・var 宣言って、そういう意味なんですね ・hoge2はグローバルだと思ってました……

関連するQ&A