javascript - Javascript 引擎会提前看到常量变量吗?
问题描述
考虑这段代码
function getPow() {
const a = 2
return Math.pow(2, a)
}
如果a
是一个常量并且它不被pow
函数使用,javascript引擎会提前进行数学运算(创建阶段)并将结果放入return
还是函数每次调用时都会进行计算?
所有引擎(V8、SpiderMonkey 等)都一样吗?
解决方案
是的,V8 的优化编译器支持“常量折叠”(即在编译时知道它们的输入时在编译时执行计算),并且这种优化确实会触发问题中的示例。
是否const a
用于其他用途并不重要。
虽然所有引擎都这样做可能是真的,但它也是一个内部实现细节,我不建议依赖它(在任何引擎中)。在大多数情况下,它也不应该真正重要。
推荐阅读
- spring-boot - 尽管获取加入,但无法解决 @ManyToOne n+1 呼叫
- javascript - 在 Javascript 中从对象数组中删除键
- azure - 将使用 buildah 构建的映像从 Azure 容器注册表部署到 Azure 容器实例
- java - 在动态 xyplot jfreechart 中更新 BufferedImage
- c# - ASP.NET Core从存储过程中获取Json的重构方法
- git - 从 TFS 克隆私有存储库时身份验证失败
- kotlin - MockK 使用私有构造函数创建无效对象
- r - 无法在简单逻辑回归上绘制 p 值
- server - 在本地使用 Jupyter 从远程运行 Julia
- flutter - 更改背景 appBar 以及如何设置样式