ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript 変数のスコープ、メモリ、DOM リーク、その他の問題の例の詳細な説明

JavaScript 変数のスコープ、メモリ、DOM リーク、その他の問題の例の詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-07-18 10:31:521417ブラウズ

スコープ

変数が関数内で宣言されていないか、var なしで宣言されている場合、その変数はグローバル スコープを持ち、ウィンドウ オブジェクトのすべてのプロパティにアクセスできます。コードで定義され、関数内で宣言されます。また、var で変更された変数はローカル変数であり、関数本体内でのみ使用できます。ただし、関数のパラメータは var を使用しません。

ブロックレベルのスコープはありません


// if语句:

<script type="text/javascript">
if(true){            //if语句的花括号没有作用域的功能。

var box = "trigkit4";
}
alert(box);//弹出 trigkit4
</script>

for ループステートメントについても同様です。

変数クエリ

変数クエリでは、ローカル変数へのアクセスはグローバル変数よりも高速であるため、スコープチェーンを検索する必要はありません。
次の例:


<script type="text/javascript">
   var name = "Jack";
   function setName(){
      var name = "trigkit4";
      return name; //从底层向上搜索变量
  }
  alert(setName());   
</script>

メモリの問題

JavaScriptには、データが使用されなくなったら、「null」に設定して参照を解放できます

循環参照。

非常に単純な例: DOM オブジェクトが Javascript オブジェクトによって参照され、同時に同じまたは別の Javascript オブジェクトを参照すると、この DOM オブジェクトがメモリ リークを引き起こす可能性があります。この DOM オブジェクトへの参照は、スクリプトの停止時にガベージ コレクターによって再利用されません。参照サイクルを中断するには、DOM 要素を参照するオブジェクト、または DOM オブジェクトへの参照に null を割り当てる必要があります。

クロージャ

クロージャ外の変数がクロージャ内に導入された場合、クロージャ終了時にオブジェクトをガベージコレクション(GC)することができません。


var a = function() {
 var largeStr = new Array(1000000).join(&#39;x&#39;);
 return function() {
  return largeStr;
 }
}();

DOM リーク

元の COM が削除されると、削除されない限り、子ノードの参照はリサイクルできません。


rreeee

timersタイマーリークス

timersは、メモリリークが発生する一般的な場所でもあります。メモリリーク:

タイムラインでレコードをクリック -> メモリ:

以上がJavaScript 変数のスコープ、メモリ、DOM リーク、その他の問題の例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。