2

JavaScript の非表示または非表示の変数について質問があります。それらはグローバルなコンテキストで作成されていないためです。大規模な Web アプリケーションを作成する場合、いくつかの変数または関数は不可分に存在しますが、それらの存在はわかりません。彼らは私たちのリソースを CPU や GPU として食い尽くします。たとえば、無名関数のすべての変数が実行後に削除されることを常に期待しています(もちろん、上位コンテキストからの参照がない場合)。この例では、interval変数はどこにも表示されませんが、常にコンソールintervalID に書き込みます。

(function () {      
    var interval = setInterval(function(){
        console.log(interval.toLocaleString());
        // some heavy operation
    }, 1000);
})();

もう 1 つの例は、Backbone.js でビューを作成した後、ビューを削除した後、それも存在することに気付きました。私の質問は、存在するがグローバルコンテキストでは表示されないすべての変数をどのように検索または表示できますか?

4

2 に答える 2

0

次の 2 つのページを参照してください。

https://developers.google.com/chrome-developer-tools/docs/heap-profiling

https://developers.google.com/chrome-developer-tools/docs/heap-profiling-containment

基本的に、ヒープのスナップショットを撮り、その内容をナビゲートして、Chrome の開発者ツールでコンテキスト変数を見つける必要があります。

— 関数クロージャ内からその名前でアクセスできる、関数コンテキスト内の変数。

?ヒープ内のどの要素がコンテキスト/クロージャー変数であるかを色で判断できます ( Chrome の開発ツールの下部にある参照キーを参照してください)。

ここに画像の説明を入力

于 2013-05-24T12:17:02.793 に答える
-1

setInterval()実際にintervalIDは「間隔」オブジェクトの を返します。これは整数です。

モジラのサイトより

var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);

データをクリアする(および間隔を停止する)唯一の方法は、使用することです.clearInterval

window.clearInterval(intervalID)

そのため、起こっていることは、あなたが考えていたものと正確に一致しない場合があります。変数は存在しますが、interval変数はintervalID.

于 2013-05-17T19:00:53.027 に答える