Javascript 为什么jsperf会根据HTML和设置中的准备代码给出不同的结果?

Javascript 为什么jsperf会根据HTML和设置中的准备代码给出不同的结果?,javascript,html,parseint,parsefloat,jsperf,Javascript,Html,Parseint,Parsefloat,Jsperf,我想看看在javascript中哪些将字符串转换为数字的方法更有效,所以我去了jsperf看看什么方法最有效。然而,根据初始变量是在Benchmark.prototype.setup()函数中定义还是直接在全局范围中定义,我似乎得到了不同的结果 你知道为什么会发生这种情况吗?之所以会发生这种情况,是因为范围查找会带来很小的性能损失 例如: var foo = 42; // outer scope (function() { // inner scope doSomething(foo);

我想看看在javascript中哪些将字符串转换为数字的方法更有效,所以我去了jsperf看看什么方法最有效。然而,根据初始变量是在Benchmark.prototype.setup()函数中定义还是直接在全局范围中定义,我似乎得到了不同的结果


你知道为什么会发生这种情况吗?

之所以会发生这种情况,是因为范围查找会带来很小的性能损失

例如:

var foo = 42; // outer scope
(function() { // inner scope
  doSomething(foo); // needs to look up `foo` and fetch it from the outer scope
}());
即使您忽略了there的开销,这仍然肯定比:

var foo = 42;
doSomething(foo); // no scope lookups needed

不同的作用域可以启用不同的解释器优化。