gpt4 book ai didi

javascript - 如果条件评估为 false,javascript 是否仍会为 "IF"场景分配内存?

转载 作者:行者123 更新时间:2023-11-30 13:41:24 25 4
gpt4 key购买 nike

太棒了……

我有一个 IF 语句,现在将在 99.7% 的时间内评估为真,其中包括检查浏览器是否支持 DOM 1+,然后加载一大块代码。

因此放置一个“if (true)”并省略“else”部分是合乎逻辑的,但我想知道旧浏览器是否仍会继续解析代码并分配内存,然后最终决定中断执行。 ..

我现在不关心这一点,因为我们已经有 10 多年的好浏览器了,但为了将来引用,我希望有人知道。

我想我的问题或多或少是这样的:浏览器是否在执行第一个条件语句之前解析整个文件并分配内存,这是第一件事?

提前致谢:)

最佳答案

有两件事被提升到执行上下文之外,即使永远不会到达相关代码也会产生影响:functionvar

在代码块中放置一个 var 声明将在代码块进入时立即为该变量“保留内存”,但该变量的值将只是指向 的指针undefined 对象,所以它只是非常小的字节数。

function 语句放在代码块中,既会为变量“保留内存”,也会计算 function,分配结果 Function在执行 block 中的第一行代码之前,将对象赋给变量。这就是您如何调用仅在脚本下方定义的函数。

在 ECMAScript 标准规则下,您只能将 function 语句放在代码块的根部;也就是说:

if (true) {
function f() {
...
}
}

是非法的。但是,浏览器通常仍然允许它,并且当您这样做时具体发生的情况因浏览器而异。避免这种情况。 (还要避免命名的内联函数表达式,它们在 IE 的 JScript 中会被错误地提升和双重计算。)

如果您真的想停止为您不打算使用的变量和函数分配任何内存,请将它们放在它们自己的函数 block 中。无论如何,这是在库代码中维护干净命名空间的常用策略。例如:

if (condition) (function() {
var foo= 1;
function bar() {
alert(foo);
}
})();

这样做节省的内存量非常小。

但是现在每个主流浏览器都支持 DOM Level 1;如果您的脚本中有支持 Netscape 4 的备份代码,那么早就该删除它了。目前的基准桌面浏览器是 IE6。

当今使用的唯一浏览器中简单的 DOM 操作仍然是一个问题的浏览器是 IEMobile,即 IEMobile 8/WinMobile 6.1.4 之前的版本。然而,这个浏览器太糟糕了,几乎没有脚本可以按原样运行;几乎所有事情都需要变通办法。

关于javascript - 如果条件评估为 false,javascript 是否仍会为 "IF"场景分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2116900/

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