Java脚本中的代码性能以及函数和命名函数表达式之间的区别

时间:2018-09-06 05:58:58

标签: javascript performance function syntax

有时,代码中有50k +行,因此应该对其进行优化以使其运行更快。在这里,我对功能有这样的疑问。我们知道两者之间的区别:

function f () {
  //code here
}

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

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

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

这将引发错误。 但是:

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

这可以正常工作。

我的问题是这个。这两个声明之间没有任何根本区别。它会影响代码行超过50k的大型项目的性能吗?

3 个答案:

答案 0 :(得分:1)

实际上有一些区别http://jsben.ch/SqczP

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

但是您问题的实际答案是:不,直到您决定以大循环声明函数时,它才会出现。即使这样,您也不必停止做这样的结构,而不必优化声明

答案 1 :(得分:0)

JavaScript中的函数声明被提升到封闭函数或全局范围的顶部。您可以在声明函数之前使用该函数:

  

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

hoisted(); // logs "foo"

function hoisted() { console.log('foo'); }

AND

请注意,函数表达式不会被悬挂(您不能在之前调用):

  

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

notHoisted(); // TypeError: notHoisted is not a function

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

答案 2 :(得分:0)

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

这行不通,因为如果吊起了声明,但分配却没有,它实际上就是这样运行的

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