コードを考えてみましょう (jquery 1.7.1):
// "public" each
each: function( callback, args ) {
return jQuery.each( this, callback, args );
}
// "local" each
each: function( object, callback, args ) {
// [...]
if (args) {
// [ args is for internal use ...]
// A special, fast, case for the most common use of each
} else {
if (isObj) {
for (name in object) {
if (callback.call(object[name], name, object[name]) === false) {
break;
}
}
// [...]
ご覧のとおり、callback
は直接参照および使用されます。関数のコピーはありませんcallback
。それにもかかわらず、 jQueryが関数をコピーした場合、提案された回避策はjQuery内で同じ動作を生成します。
注: JavaScript では、関数はオブジェクトです。ある関数宣言構文が別の関数宣言構文と異なる動作をする「不合理な」理由はありません。唯一の違いはスコープです。提案された回避策は、関数をグローバルなものにしますが、他の匿名関数はeach
呼び出しに対して「ローカル」です