以下讨论:
在Javascript中声明函数的最有效方法是什么?
我对JavaScript中的函数声明有疑问.
通过匿名函数声明我的意思是这样的(https://en.wikibooks.org/wiki/JavaScript/Anonymous_Functions):
var myFunction = function (fruit){ alert('I like ' + fruit); }
而const我的意思是:
const myfunction = (fruit) => alert('I like ' fruit);
使用匿名函数或使用const更快吗?我已经读过使用const允许在JavaScript中进行编译优化.有什么理由我应该使用一个而不是另一个?
这甚至是相关的吗?
匿名函数VS const函数
大概是你在比较
var func = function() { }; // or let func = function() { };
同
const func = function() { };
这样做的主要原因不是优化.它通过代码记录您永远不打算改变func
,并让引擎保护您不会意外这样做.(我还应该注意到,从ES2015开始,这些函数都不是匿名的.它们都有名称func
,因为ES2015添加了为基于上下文通过"匿名"函数表达式创建的函数赋值的规则,包括简单赋值的规则以上.)
但关于优化:
与大多数JavaScript优化问题一样,答案是:它取决于.从理论上讲,const
如果您从不打算改变值,那么使用它func
意味着JavaScript引擎可以选择在假设值永远不会改变的情况下进行优化.请注意,它不会免除引擎处理符号在嵌套范围或类似范围内被遮蔽的可能性.
基于该知识,发动机是否确实以有意义的方式进行优化,价值不会改变将取决于发动机的实施,并且可能因发动机而异.
是否通过常量查找函数以便比通过变量查找它更快地取决于引擎的实现.
是否任何绝对差异转化为程序中的实际增益将取决于上述内容,程序的结构,使用函数的频率,查找时间与函数实际执行情况的比较(例如,淹没),等等
这取决于.:-)
如果遇到您认为查找时间导致实际问题的情况,请对其进行分析并查看它是否有所不同.
重新编辑:
通过匿名函数声明我的意思是这样的:
function myFunction(fruit){ alert('I like ' + fruit); };而const我的意思是:
const myfunction = (fruit) => alert('I like ' fruit);
第一个不是匿名函数.它是一个名为的函数myFunction
,通过函数声明创建.(并且作为声明,;
最后不需要.)函数声明不能创建匿名函数,名称是声明的必需部分.
也就是说,它并不重要,因为一旦创建了函数(它发生在与上面显示的表达式不同的时间),它的行为非常类似于var func = ...
如何func
解决的示例,是否可以更改func
,等等
你的第二个例子与你的第一个例子不同,但有三个重要方面:
它将函数引用赋给常量.
它使用箭头函数,而不是function
函数(由于缺少一个更好的术语,我将称之为"简单"函数).
你的箭头函数版本返回调用的结果alert
(因为你在箭头函数上使用了一个简洁的正文).您的声明版本没有.
我们已经处理了#1的任何性能方面.我怀疑,#3不太重要.
Re#2(它是一个箭头函数):调用一个箭头函数比调用一个简单的函数(理论上)需要更少的工作.引擎不必设置arguments
伪对象,也不必创建this
绑定.但是如果使用箭头函数this
,则需要更多的工作来查找它(它就像函数关闭的外部作用域中的变量).但同样,这就是理论; 只要副作用不明显,发动机就可以优化.例如,如果您不在arguments
代码中使用,现代引擎无论如何都会避免创建它,即使对于简单的函数也是如此.而且我希望围绕箭头函数使用的优化this
非常好,因为this
一旦函数存在,它们看不到改变.
所以(等待它):这取决于.