这个问题并不是一个实际问题,而是基于代码结构对V8优化探究的一次探索。
我和另一个开发者正在讨论在V8编译优化中使用const字符串字面量 vs 内联字符串字面量的价值。当然,假设我们始终处于严格模式。
下面是一些代码示例,以便更好地理解:
const
const NAME = "something";
function doSomething(s) {
return NAME + s;
}
对比
内联字符串
function doSomething(s) {
return "something" + s;
}
我们所达成的共识:
- 使用const能够更清晰地表述“魔法值”,从而方便代码维护。
我们存在分歧:
我认为使用const可以让V8在编译时对您的代码进行优化,因为它保证了常量值不会改变。
他认为使用inline-string字面值与const相同(如果不是更好,因为减少了间接性),对于V8编译器来说同样可以应用相同的优化,因为引用此类内联字符串时也可以这样做。
经过一番思考,我倾向于同意他的观点...字符串字面值将在每次调用函数时重新实例化,但这可以轻松地被V8进行优化并避免对后续调用产生影响。然而,我对编译器和编译器优化方面并不是很了解。
有人能够解释一下吗?
getSomething
时,它是否仍然使用相同的代码实例但在不同的闭包中,还是只是不同的实例? - l4m2