javascript - 为什么 new Function(code) 比直接执行相同的代码更快?

标签 javascript performance function

我正在比较 eval(code)new Function(code) 之间的执行时间。

而且我发现 new Function(code) 比直接执行相同的代码更快。

这是什么原因?

var start = new Date().getTime();

var test = ''; for (var i = 0; i < 1000000; ++i) { test += 'a'; }

var end = new Date().getTime();

console.log('Execution time: ' + (end - start));

// vs.

var start2 = new Date().getTime();

var f = new Function("var test = ''; for (var i = 0; i < 1000000; ++i) { test += 'a'; }");

f();

var end2 = new Date().getTime();

console.log('Execution time: ' + (end2 - start2));

最佳答案

这实际上与您正在创建函数这一事实无关,而是与 test 变量的范围有关。

由于 scope chain,在 JavaScript 中访问全局比访问本地要慢得多- 简而言之,由于 JavaScript 是一种动态语言,每次您在代码中使用名为 test 的符号时,JS 引擎都需要“查找”并查看该符号实际表示的内容(它在哪里定义)。在此查找中,全局变量是它查找的最后位置。因此,访问局部变量比访问全局变量快得多。

在代码的第一部分,变量 test 是一个全局变量,因此循环的每次迭代都需要解释器进行完整查找才能找到它。但是,在您定义的函数中,test 在本地重新定义,使其访问速度更快。

这是一个 jsperf slug这表明了这一点。

关于javascript - 为什么 new Function(code) 比直接执行相同的代码更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26077848/

相关文章:

javascript - 在按钮单击时切换动画 Div

javascript - 我如何设置 bxslider 的样式?

r - 预先计算长度未知的向量 - 我应该 "grow"吗?

matlab - 多个矩阵乘以多个向量的快速乘法

javascript - 仅执行一次函数以节省时间

excel - 从日期格式 VBA 中减去整数

javascript - 在 Electron 中禁用全屏模式

javascript - Jquery lightgallery 如何关闭字幕

java - JVM 能够进行简单的递归调用预计算吗?

c - 使用最大的账单代表金额。指针困惑