V8等JavaScript引擎是否会优化仅在enableTranslatedLabels为true时执行getTranslation?
问题:V8这类JavaScript引擎是否足够智能,仅当enableTranslatedLabels为true时才执行getTranslation函数?
现有代码:
import getTranslation from "some-library"; import getUserSettings from "some-other-library"; const getTranslatedLabel = () => { const translatedLabel = getTranslation("cheeseburger"); const { enableTranslatedLabels } = getUserSettings(); if (enableTranslatedLabels) { return translatedLabel; } else { return ""; } }
回答:
不会。当前代码里getTranslation("cheeseburger")在函数执行的最开始就会被同步调用,和后续的条件判断无关。V8这类引擎不会自动调整这个执行顺序——因为引擎没法确定getTranslation是否带有副作用(比如修改全局状态、发起网络请求等),所以必须严格按照代码书写的先后顺序执行。
如果要实现仅当enableTranslatedLabels为true时才执行getTranslation,需要把函数调用移到条件分支内部,修改后的代码如下:
import getTranslation from "some-library"; import getUserSettings from "some-other-library"; const getTranslatedLabel = () => { const { enableTranslatedLabels } = getUserSettings(); if (enableTranslatedLabels) { return getTranslation("cheeseburger"); } else { return ""; } }
内容的提问来源于stack exchange,提问作者Kevin Lee
相关产品推荐
相关产品推荐

