2011-10-02 3 views
4
function outer(){ 
    var a, b, c; 

    function inner1(){ 
    ... 
    } 

    function inner2(){ 
    ... 
    } 

    inner1(); 
    inner2(); 
    ... 
} 

Я хочу, чтобы глобальное пространство имен было чистым, поэтому я написал код выше. Внутренние функции используются только кодом внутри Outer. Но после этого я начинаю думать, что это вызовет проблему с памятью. Я не уверен, созданы ли внутренние функции заранее или созданы каждый раз, когда вызывается внешний()? И будут ли они причиной утечки памяти?Может ли этот javascript вызвать утечку памяти?

Может ли кто-нибудь помочь объяснить, что произойдет, когда вызывается external() и когда он возвращается? И, пожалуйста, напишите мне, если есть хорошие книги или статьи об управлении памятью javascript. Я всегда путаю такие проблемы. Благодарю.

ответ

0

В ответ на ваш вопрос о создании внутренних функций: Я считаю, что ваш внутренние функции создаются/определяются каждый раз при запуске outer(), и большинство интерпретаторов JS должны собирать мусор после outer(), а также всех других переменных в области функций - , еслиouter() «экспортирует» эти внутренние функции за пределы своего собственного объема, например. назначая их как обработчики событий или включающие их в оператор возврата для последующего использования.

+0

Ну, если они экспортируются и используются, я бы не назвал это утечкой. – davin

+0

@ davin - нет, и я тоже. Я действительно не обращался к вопросу об утечке памяти, просто вопрос о том, были ли внутренние функции созданы каждый раз при вызове 'external()'. – nrabinowitz

0

Если вы не ввели другой код внутри - вы не должны беспокоиться о утечках в таких простых затворах. Современные javascript-двигатели отлично справляются с этим.

1

Основная проблема, которая вызывает утечку памяти в браузерах с JavaScript, заключается в том, что DOM и JS имеют два независимых сборщика мусора. Если вы начнете ссылаться на элементы DOM в вашей функции закрытия, а затем снова обратную ссылку на что-то внутри функции, вы столкнетесь с проблемами. Ваша структура не протекает, но вы хотите сделать еще несколько вещей и, возможно, протекать.

Смежные вопросы