jQuery
およびjQuery.UI
のような関連する基調講演プラグインがundefined
をパラメーターとしてモジュール定義で使用される無名関数に渡すことに気づきました。
(function($, undefined) { ... })(jQuery);
あるいは、jQueryが推奨する他のプラグインや他のプラグインが未定義をパラメーターとして渡さないことに気づきました。
これはおそらくばかげた質問ですが...
とにかく常に利用できるべきではありませんか?なぜそれを渡すのですか?ここで何か他の目的やトリックが起こっていますか?
それには2つの理由があります。
1)undefined
がグローバルオブジェクトプロパティではなく関数スコープ内の変数である場合、ミニファイアはそれを1文字に縮小して、より良い圧縮率を実現できます。
2)ES5 *以前は、undefined
は書き込み保護のないグローバルオブジェクトのプロパティでした。そのため、上書きされて、奇妙で予期しない動作が発生する可能性があります。あなたはこのようなことをすることができます:
_var test = 123;
undefined = 123;
if (test === undefined){
// this will actually be true, since undefined now equals 123
}
_
パラメータを渡さない関数の引数undefined
(名前は実際には関係ありません)を持つことで、実際にundefined
である変数があることを確認して、テストすることができます。この変数に対する「未定義」。
ところで。未定義をテストする最も安全な方法は次のとおりです。typeof ( var ) === 'undefined'
(*)EcmaScript 5では、グローバルプロパティundefined
、NaN
、およびInfinity
が読み取り専用になりました。そのため、最近のすべてのブラウザで一般的に採用されているため、もちろんIE 9を除いて)、これらの値を上書きすることはできなくなりました。
これは、undefinedが常にundefined
であることを確認するために行われます。 ECMAScript仕様の古いバージョン(ECMAScript 5より前)では、undefinedは予約語ではなく通常の変数でした。古いブラウザでは、これはたとえば次のように許可されます。
undefined = 2; // Assign a different value to undefined
// Now this statement would be true
if (undefined == 2)
したがって、undefinedが実際にundefinedであることを確認するために、他の「邪悪な」スクリプトがundefinedを別の値で再割り当てした場合でも、undefinedを呼び出すパラメーターを作成し、関数を呼び出すときに、渡さないようにします。そのパラメーターの値-したがって、未定義の変数が関数内で常に未定義になることを確認できます。
したがって、jQueryの場合:
(function($, undefined) { ... })(jQuery);
便宜上、jQueryを渡して$変数に割り当てますが、undefinedパラメーターに2番目の値を渡さないため、undefinedは未定義になります。
最新のブラウザ
最近のブラウザでは、undefined
は、 ECMAScript 5仕様 に従って、構成および書き込み不可能なプロパティです。
undefinedはjavascriptで予約語ではなく、単なる変数です。 jQueryは、悪い開発者がjavascriptのundefinedの値を上書きした場合、jQueryがそれを無視し、値が渡されない独自の変数undefinedを確立することを保証しています(最後の自己実行(jQuery)を参照)。したがって、実際には未定義です。