jsリサイクルの仕組みをわかりやすくバージョンアップで理解する_javascriptスキル

WBOY
リリース: 2016-05-16 15:13:08
オリジナル
1023 人が閲覧しました

前回の記事でjsでのリサイクルの仕組みを説明しましたが、当時の私にとってリサイクルの仕組みの概念が少し理解できたので投稿します。記憶を要約して深めるための記事。
なぜリサイクルメカニズムがあるのですか?なぜ?

たとえば、このメモリ カードは 8G ですが、このメモリ カードにファイル、ビデオ、音楽を保存すると、必要に応じて保存できなくなります。このメモリカードに他のファイルを保存するには、いくつかのファイルを削除する必要がありますが、これらの削除されたファイルは、js での削除と同じです。

これらの問題は、これらのプログラミング言語でも発生します。そう、メモリです。宣言した変数はすべてメモリを消費し、変数の数が増えるほど実行が遅くなります。もちろん変数だけではなく、コード内のあらゆるものに適用されます。これらの問題を解決するために、これらの言語の設計者は一連のコード リサイクル ルールを設計しました。

コードの再利用ルールは次のとおりです:

1. グローバル変数は再利用されません。

2. ローカル変数はリサイクルされます。つまり、関数の実行が終了すると、関数内のすべてが破棄されます。

3. 別のスコープによって参照されている限り、リサイクルされません

これらを証明するためにいくつかの例を使用します。

function a(){
 var user = "追梦子";
 return user;
}
var b = a();
console.log(b); //追梦子 
ログイン後にコピー

論理的には関数aの変数にはアクセスできませんが、関数aの戻り値はグローバル変数b経由で受け取っているので、最終的には以下のコードになりました。

function a(){
 var user = "追梦子";
 return user;
}
var b = "追梦子";
console.log(b);
ログイン後にコピー

これにはコードの再利用がないようなので、次のコードを見てみましょう。

function a(){
 var num = 0;
 return function(){
  num ++;
  console.log(num);
 };
}
var b = a();
b(); //1
b(); //2
b(); //3
ログイン後にコピー

ほら、通常どおりに実行すると、出力は 3 回と 1 回になるはずです。これは、関数本体を実行すると、関数本体内のコードがクリアされるため、次にこのセクションを実行します。 time コードを記述するとき、num は 1 のままである必要がありますが、ここでの状況は少し異なります。関数内のローカル変数が別のスコープによって参照されている限り、このコードは破棄されません。

上記のコードは次のようになります

function a(){
 var num = 0;
 return function(){
  num ++;
  console.log(num);
 };
}
var b = function(){
  num ++;
  console.log(num);
 };
b();
b();
b();
ログイン後にコピー

その後、関数 a が返した無名関数のスコープが関数 a から window に移動します。この無名関数はグローバル変数 b で参照されているため、破棄されません。

function a(){
 var num = 0;
 return function(){
  num ++;
  console.log(num);
 };
}
var b = {
 fn:a()
}
b.fn(); //1
b.fn(); //2
b.fn(); //3
ログイン後にコピー

同じことが当てはまります。匿名関数はオブジェクト b の属性 fn によって参照され、スコープが変更されるためです。簡単に言うと、関数またはローカル変数のスコープが変更される限り、関数またはローカル変数は変更されません。破壊されました。
以上がこの記事の全内容です。js リサイクルの仕組みについて少しでもお役に立てれば幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート