Javascript Java脚本中函数和命名函数表达式的代码性能及差异

Javascript Java脚本中函数和命名函数表达式的代码性能及差异,javascript,performance,function,syntax,Javascript,Performance,Function,Syntax,有时,代码中有50k+行,应该对它们进行优化以使其工作更快。这里我有一个关于函数的问题。我们知道这两者之间的区别: function f () { //code here } 及 第一个是在加载代码时立即声明的,第二个是在遍历代码的过程中声明的。这意味着: f(); var f = function () { //code here } 这将抛出一个错误。 然而: 这很好用 我的问题是。这两种声明之间有什么根本区别吗。它会影响代码行数超过50k的大型项目的性能吗 实际上有一些区别 具

有时,代码中有50k+行,应该对它们进行优化以使其工作更快。这里我有一个关于函数的问题。我们知道这两者之间的区别:

function f () {
  //code here
}

第一个是在加载代码时立即声明的,第二个是在遍历代码的过程中声明的。这意味着:

f();
var f = function () {
  //code here
}
这将抛出一个错误。 然而:

这很好用


我的问题是。这两种声明之间有什么根本区别吗。它会影响代码行数超过50k的大型项目的性能吗

实际上有一些区别

具有基于变量声明的分支的性能提高了11%


但您的问题的实际答案是:不,直到您决定在大循环中声明函数,它才会出现。即使这样,您也必须停止使用这种结构而不是优化声明,JavaScript中的函数声明被提升到封闭函数或全局范围的顶部。您可以在声明函数之前使用它:

在执行任何代码之前加载函数声明

highed();//日志“foo”

功能提升(){
console.log('foo');
}

请注意,函数表达式未被提升(之前不能调用):

函数表达式仅在解释器到达该代码行时加载

notoisted();//类型错误:NOTHOITED不是一个函数

var notHoisted=函数(){
console.log('bar');
};

这将不起作用,因为如果声明被挂起,但分配没有被挂起,它实际上是这样运行的

var f;
f();
f = function () {
  //code here
}

这不是Stackoverflow的真正问题-你可以做一些匹配,并在类似的东西上测试自己,你可以通过简单的谷歌搜索找到。简单的谷歌搜索确实会回答这个问题,即使如此:。对于真正深入的研究:那么你的意思是声明不影响任何性能?就像任何变量一样,函数表达式只会在需要时执行。@KoboldMines相反,我确信如果它影响性能,你需要重构所有代码,而不仅仅是声明本身
f();
function f () {
  //code here
}
f();
var f = function () {
  //code here
}
var f;
f();
f = function () {
  //code here
}