Javascript 在函数中声明常量

Javascript 在函数中声明常量,javascript,performance,Javascript,Performance,我想知道这两个系统之间是否有性能差异 var DATA = {a: 1, b: 2, ....}; function f() { ... use but do not modify DATA; } 及 在现代Javascript引擎中。理论上,在后一种代码中,必须在每次函数调用时创建结构。但是引擎可以看到它没有被改变,并保留它以供重用 我非常清楚过早的优化陷阱和可读性比性能更重要;我只是好奇。由于jsperf下降了,我认为自己没有简单的方法获得一些数据 使现代化 鉴于此,看起来至少V

我想知道这两个系统之间是否有性能差异

var DATA = {a: 1, b: 2, ....};

function f() {
    ... use but do not modify DATA;
}

在现代Javascript引擎中。理论上,在后一种代码中,必须在每次函数调用时创建结构。但是引擎可以看到它没有被改变,并保留它以供重用

我非常清楚过早的优化陷阱和可读性比性能更重要;我只是好奇。由于jsperf下降了,我认为自己没有简单的方法获得一些数据

使现代化 鉴于此,看起来至少V8可以进行写时复制,所以在大多数现代浏览器中它可能是免费的


考虑到现代JS引擎的工作方式,手动对这些东西进行基准测试是徒劳的,请不要向任何人推荐。许多优化在几次迭代后就开始了,然后可能会发生更多的评测、死代码消除等。我不知道jsperf(有点像ATM)是否可以做到这一点,但手动执行是没有意义的(比较)。

相比之下会有性能差异。当你比较两者的时间线时。我们将观察到带有局部变量的函数工作得很快。无论您使用局部变量调用函数多少次,第二种类型的性能都会获胜。

我不明白。jsPerf已关闭,请StackOverflow为您执行此操作?或者您是在问如何在没有jsPerf的情况下进行性能测试?只是不知道你在追求什么。似乎离题了。选民们,请解释一下这个问题有什么问题!问JS性能是被禁止的还是什么?开发人员工具有一对有用的
console.time/console.timeEnd
对。人们通常只是进行典型的
n
迭代循环,以便更好地了解差异<代码>控制台时间(“foo”);/*do work*/console.timeEnd(“foo”)不完美,但这似乎并不重要。
function f() {
    var DATA = {a: 1, b: 2, ....};
    ... use but do not modify DATA;
}