電子書籍の厳選無料作品が豊富!

(function ($) {
var func=function(){
};
var a=1;
})(window.jQuery);
などと書いても、func 及び a は外部と衝突を起こさない。
スコープ的なものを意識しての書き方だと思いますが、

})(window.jQuery);
ここの部分は
})(jQuery);
こういうのも見ます。上記と同じでしょうか ?
})(XXXXX);
XXXXXの引数に全然違う名前を書くというのは無しですよね ?

A 回答 (2件)

局所的なスコープを作るための使い捨て関数ですね。


よく使う値 jQuery を短い名前 $ に短縮する意味もあるようです。

jQuery は、(たいていの場合は)グローバルスコープ上の変数名です。
単に jQuery と記載すると、局所的なスコープで上書きされていないかぎり、グローバルスコープの変数から値を取ってきます。

window は、グローバルスコープ上の変数名で、中身はグローバルオブジェクトそのものです。
window.jQuery と記載すると、window が別の値に上書きされることはないので、「必ず」グローバルスコープの変数から値を取ってきます。

必ずを強調したい場合は、変数名の頭に window. をつけましょう。

余談ではありますが、
最近では window ではなく globalThis を使う方針のようです。
https://developer.mozilla.org/ja/docs/Web/JavaSc …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

参考になります。

お礼日時:2021/09/25 09:29

こんにちは



既に回答は出ていますけれど・・・

>func 及び a は外部と衝突を起こさない。
>スコープ的なものを意識しての書き方だと思いますが、
ご指摘の通りですが、それ以前に、
>(function ($) {
 ~~
>})(window.jQuery);
は、変数$を局所的にwindow.jQueryとして利用する意味が強いと思います。

通常、何もせずにjQueryを読み込むと、グローバル変数の$はjQueryの意味を持ちますが、変数$が他のライブラリ等とコンフリクトするような場合でも、上記構文の場合は、スコープ内で安全に$=jQueryとして利用できます。
グローバル変数としては使えない場合でも、一般的な$を用いた記述をそのまま利用できるということもあると思います。

※ jQueryで$を開放する例
https://api.jquery.com/jQuery.noConflict/


>XXXXXの引数に全然違う名前を書くというのは無しですよね ?
書くことは可能です。
ただし、その値が仮引数の$の意味になりますので、当然ながら、その後の記述は整合している必要があります。
例えば、
 (function($){
  alert( $ );
 })(new Date);
 alert( $ ); //エラー発生
とすれば、即時関数で日付がalert表示されます。
二番目のalertでは、$(=グローバル変数)が未定義なのでエラーが発生します。(=グローバル汚染がない)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2021/09/25 14:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!