Итак, я нашел этот кусок кода, и он, очевидно, работает (как это было в производстве в течение многих лет):
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
};
Любопытно узнать, как это работает?
- Как он может установить
undefined
в своем теле иtry
наdelete
сам? - Знает ли браузер, что он не выполняет
undefined
иdelete
, пока вызов не будет завершен? И как? - Если браузер удаляет его сразу, то что происходит после? Выполняется ли последняя строка?
- Наконец, вы, ребята, видите эту утечку памяти? Если да, то как?