イナヅマTVログ

JavaScript, 匿名関数の実行そして関数と変数の隠匿

| 2件のコメント

関数の意図しない上書きを防ぐ

関数の上書き
JavaScriptの関数・変数は全てpublicです。
そのために意図しない上書きが行われてしまい、エラーが発生したり誤動作を起こしてしまうことがあります。

jQueryとprototype.jsを同時に使用すると関数$()がコンフリクトを起こすことは有名です。
意図しない上書きがおこるためです。

JavaScriptで関数・変数を外部からアクセスできないようにするためにはローカル扱いにすると可能です。

function someMethod () {
    var dog = 'Pochi';
}

関数someMethodに設定した変数dogはローカル変数なので関数外部からアクセスすることはできません。
ところが関数someMethodはグローバルなので上書きが可能です。

function someMethod () {
    var dog = 'Pochi';
    alert(dog);
};
someMethod();// Pochi
someMethod = function () {
    console.log('override');
};
someMethod();// console log

1度目のsomeMethod();2度目のsomeMethod();では実行結果が違います。
途中で関数の上書きが起こっているからです。

匿名関数

(function (){
    var dog = 'Pochi';
    alert(dog);
})();

今では見慣れた構文ですけど最初に見た時にかなり違和感を覚えました。
匿名の関数を作成しそのまま実行しています。

jQueryの練習問題なんかにも良く登場しますよね。

(function ($){
    var dog = $('#dog');
})(jQuery);

ノーコンフリクトなjQueryを引数で渡し匿名関数内では使い慣れた$を使用します。

匿名関数は名前を持たないので上書きの方法がありません。
匿名関数内の変数・関数をローカル設定すれば外部からアクセスできません。

2件のコメント

  1. ピンバック: JavaScriptでOOP – privateぽい関数と変数 | イナヅマtvログ

  2. ピンバック: 超個人的メモ, JavaScript関連の投稿リンクをまとめておく - イナヅマtvログ

コメントを残す

必須欄は * がついています


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください