Javascript 浏览器如何真正读取if/else语句?

Javascript 浏览器如何真正读取if/else语句?,javascript,if-statement,Javascript,If Statement,这是一个非常简单的问题,但对我们中的一些人来说可能真的很有用。我一直在谷歌上寻找答案,但我没有找到。我怀疑浏览器是如何读取if/else语句的。简言之,当条件为false时,浏览器是忽略结果(即不读取结果),还是先读取结果,然后不执行代码?例如,当您有一个非常重的长循环代码时,差异是巨大的。谢谢 简而言之,它取决于用户代理,更具体地说,取决于它的javascript引擎。现代引擎非常聪明,可能会一起忽略它,特别是如果它可以推断分支是死代码并且永远不会执行的话。也就是说,可以安全地忽略此代码: i

这是一个非常简单的问题,但对我们中的一些人来说可能真的很有用。我一直在谷歌上寻找答案,但我没有找到。我怀疑浏览器是如何读取if/else语句的。简言之,当条件为false时,浏览器是忽略结果(即不读取结果),还是先读取结果,然后不执行代码?例如,当您有一个非常重的长循环代码时,差异是巨大的。谢谢

简而言之,它取决于用户代理,更具体地说,取决于它的javascript引擎。现代引擎非常聪明,可能会一起忽略它,特别是如果它可以推断分支是死代码并且永远不会执行的话。也就是说,可以安全地忽略此代码:

if (false) {
  // Do a bunch of stuff
}
然而,即使它没有这样做,也很可能在分支中需要大量的代码,才能真正改变解析延迟。几条线不会产生足够的差异,以保证任何速度问题

然而,与以往一样,在绩效方面,衡量确实是唯一重要的事情。人们会对什么更快说各种各样的话,但是没有证据就没有意义,所以如果你不确定哪个更快:测量它!根据javascript引擎的不同,您可能会得到非常不同的结果,因此无论如何,最好采用这种方法,而不是使用StackOverflow,即使这是一个非常智能的社区


查看测量不同用户代理之间差异的好方法。

不是浏览器,而是其中的Javascript解释器,它解析Javascript的条件语句。而且现代Javascript实现非常复杂(跟踪JIT技术等)。如果循环代码足够长,以至于需要扫描多长时间都很重要,那么您可能做错了。谢谢!我将检查jsperf。此外,我的问题不是实际问题,而是理论问题。我有一个requestAnimationFrame循环可以正常工作,但我想知道我是否做了正确的事情。就是这样。问题是,当谈论性能时,理论上的东西几乎总是无用的,因为你很可能最终会出错。在谈到绩效时,衡量是唯一重要的。在你测量之前,你永远不会知道。