Javascript 是否在每次调用时重新计算命名空间函数?

Javascript 是否在每次调用时重新计算命名空间函数?,javascript,Javascript,在本例中: function foo () { function bar () { return 'foo bar'; } bar(); } foo(); bar是否每调用foo一次就重新计算一次 相反地: function bar () { return 'foo bar'; } function foo () { bar(); } foo(); 这表明后一个示例的速度快+/-1.6倍(在Chrome中) 如果不重新评估,为什么第二种模式比第一种模式快得多?简短

在本例中:

function foo () {
  function bar () {
    return 'foo bar';
  }
  bar();
}
foo();
bar
是否每调用
foo
一次就重新计算一次

相反地:

function bar () {
  return 'foo bar';
}
function foo () {
  bar();
}
foo();
这表明后一个示例的速度快+/-1.6倍(在Chrome中)

如果不重新评估,为什么第二种模式比第一种模式快得多?

简短回答:是的

正如在问题的注释中提到的,无论何时调用函数,函数体中的所有内容都会运行


第二个示例更快,因为它只需要调用以前初始化的函数,而在第一个示例中,代码每次都必须重新初始化函数。基本上,每次调用
foo()
时,它都必须重复该工作,这会占用额外的处理时间。

每次运行它时,都会对整个函数体进行评估。只要
bar
函数声明成为主体的一部分,它也会被每次评估。谢谢。在提出问题之前,我只知道问题的一半答案——仅仅是从实际经验中得出的。我想我的“字里行间”问题是,我该如何验证这一点?它会随着浏览器的不同而变化吗?标准的“JavaScript是如何工作的?”google search没有产生有用的结果。函数允许在内部缓存,因此每次
bar()
可能不会100%重新创建(尤其是函数体,因为它是静态的),但它必须重新构建它的信封,而第二个不需要这样的设置成本。