ホームページ  >  記事  >  ウェブフロントエンド  >  js関数、メモリオーバーヘッド_javascriptスキルへの参照

js関数、メモリオーバーヘッド_javascriptスキルへの参照

WBOY
WBOYオリジナル
2016-05-16 17:49:541094ブラウズ

次のコードを見てください:

コードをコピー コードは次のとおりです:

var arr = [];
var cc = function(){alert('xx');};


for(var i = 0; i
arr[i ] = function(){alert('yy');}
arr[i 10] = cc;
}

console.group('start')
console.group( '1')
console.info( arr[0] == arr[1]);
console.info( arr[0] === arr[1]); >
console.info(arr[0].toString());
console.info(arr[1].toString());
console.groupEnd('1')


console.group('2')
console.info( arr[10] == arr[11]);
console.info( arr[10] === arr[11] );

console.info(arr[10].toString());
console.info(arr[11].toString()); console.groupEnd(' Start');



Firefox の Firebug でのコンソールの実行結果は次のとおりです:





js関数、メモリオーバーヘッド_javascriptスキルへの参照 分析:

コードの 5 行目のループが開始され、ループが終了すると、arr 配列の結果は次のようになります: arr[0] = function(){アラート('yy'); }
arr[1] = function(){ アラート('yy') }
arr[10] = cc
arr[11] = cc
として上に示すように、コンソールの結果が表示されます。
arr[0] は arr[1] と等しくありません。
しかし、arr[10] は以前に定義された変数を参照しているため、arr[11] と等しくなります。
実際、関数 function(){alert('yy');} はループ中に再定義されています。
arr[0] と arr[1] の toString 出力の内容は同じです。 ただし、2 つのメソッドは独立しており、独自のメモリを占有するため、メモリを節約するために、関数をループの外で定義できます。
ループの外で関数を定義するための前提条件は、関数がループ内で変更される変数を受け入れないことです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。