gpt4 book ai didi

javascript - 自毁 Javascript 函数 - 它是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 13:28:32 25 4
gpt4 key购买 nike

所以我找到了这段代码,它显然可以工作(因为它已经投入生产多年了):

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在它的体内和trydelete本身?
  • 浏览器是否知道不执行 undefineddelete直到通话结束?如何?
  • 如果浏览器立即删除它,那么之后会发生什么?最后一行是否运行?
  • 最后,你们看到这个泄漏的内存了吗?如果是,如何?
  • 最佳答案

  • 它没有将自己设置为未定义,而是将对自己的引用设置为未定义。如果您将函数视为内存中的代码块,那么在这种情况下,该代码块不会被删除,只是对它的引用。您永远不会在 JavaScript 中显式删除任何内容,您只需删除对它的引用并将其留给垃圾收集器进行清理。请注意,实际代码可能并非如此,只是堆对象,这取决于引擎如何处理它(解释它,编译它,在算盘上执行它,无论如何)
  • 基于该逻辑,一旦函数正在执行,就不再需要对它的原始引用,因为最初只需要它来将执行转移给它。
  • 您将 JS 评估误解为每个语句都需要引用它。很可能,此方法已被即时编译,并且现在正在执行,就像任何其他非 JS 函数将运行一样。
  • 上面的代码中没有明显的内存泄漏。

  • 希望这是有道理的。

    关于javascript - 自毁 Javascript 函数 - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6817667/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com