関数の意図しない上書きを防ぐ
関数の上書き
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
を引数で渡し匿名関数内では使い慣れた$
を使用します。
匿名関数は名前を持たないので上書きの方法がありません。
匿名関数内の変数・関数をローカル設定すれば外部からアクセスできません。
ピンバック: JavaScriptでOOP – privateぽい関数と変数 | イナヅマtvログ
ピンバック: 超個人的メモ, JavaScript関連の投稿リンクをまとめておく - イナヅマtvログ