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

标签 javascript

太棒了……

我有一个 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/

相关文章:

javascript - 验证 mouseup/keyup 上的 Bootstrap 单选按钮

javascript - Promise.resolve 与数组

javascript - Buster.js - ReferenceError : assert is not defined, 我哪里做错了?

php - 拖放文件上传不起作用

javascript - jquery动态创建数组

javascript - 如何反序列化 node.js 中的 PHP session ?

JavaScript 函数阻止 Web 套接字并导致同步问题和延迟

javascript - 为什么 $.when().pipe().then() 有效,但 $.when().then().then() 无效?

php 数组到 javascript 对象

javascript - webkit 过渡在 mozilla 和 opera 中结束了吗?