Самоуничтожающаяся функция Javascript - как это работает?

Итак, я нашел этот фрагмент кода, и он, очевидно, работает (как и производился в течение многих лет):

window[someMethod] = function (tmp) {
    callback({prop:"val"}, tmp); 

    // Garbage collect
    window[someMethod] = undefined;
    try { 
        delete window[someMethod]; 
    } 
    catch (e) { }
    if (head) { 
        head.removeChild(script); 
    }   
    // head refers to DOM head elem and script refers to some script file elem
};

Интересно узнать, как это работает?

  1. Как он может установить себя на undefined в своем теле и попытаться выполнить удалить сам?
  2. Знает ли браузер, что нельзя выполнять undefined и delete до завершения вызова? И как?
  3. Если браузер удаляет его сразу, что происходит после? Последняя строка работает?
  4. Наконец, вы видите утечку памяти? Если да, то как?
18
задан Sergey Metlov 25 July 2011 в 14:40
поделиться