Javascript中匿名函数和命名函数的性能测试

我们经常写回调通过匿名函数(匿名函数)。

简单地说,匿名是一个没有名字的函数,它通常是立即执行的,但是它的命名函数(命名函数)的性能如何呢

我们可以比较一下,让我们寻找一台能够执行shell命令的计算机,使用大量的函数调用来查看两个人执行消耗时间:

anonymous.js

复制代码代码如下所示:

var计数= 100000000

总和= 0

当(计数)(函数(){和})()



执行它

复制代码代码如下所示:

时间节点anonymous.js美元

真正的0m1.456s

用户0m0.015s

系统0m0.031s



再次查看命名函数。

named.js

复制代码代码如下所示:

var计数= 100000000

总和= 0

函数(){()

和+ +

}

当(计数)- CB()



执行它

复制代码代码如下所示:

时间节点named.js美元

真正的0m0.575s

用户0m0.000s

系统0m0.046s



命名函数会快得多。为什么不难解释,每个匿名函数都需要重新解释回调函数,但只需要解释一个命名函数,这样性能就会得到改善,但是测试发现提升很小,而不是一个回调,很容易将另一个变量写入另一个变量。

此外,还有两种命名法。

功能性表达

复制代码代码如下所示:

函数(){()

console.log(A)

}



函数声明

复制代码代码如下所示:

函数(){

console.log(B)

}

事实上,这两个词在一起可能有问题,例如

复制代码代码如下所示:

函数(){()

console.log(A)

}

函数(){

console.log(B)

}

输出:



现在我们使用函数表达式的形式,但是函数声明的性能如何呢

named2.js

复制代码代码如下所示:

var计数= 100000000

总和= 0

函数CB(){

和+ +

}

当(计数)- CB()



执行它,并比较两个

复制代码代码如下所示:

时间节点named.js美元

真正的0m0.553s

用户0m0.000s

系统0m0.015s

时间节点named2.js美元

真正的0m0.529s

用户0m0.000s

系统0m0.047s



似乎函数的语句会快一点,但是它非常非常模糊,并且个人建议函数应该用明确的方式写。

PS:这个数据是在Windows7的Git库测试。