匿名函数VS const函数--javascript

时间:2015-12-09 14:50:46

标签: javascript function const

在此讨论之后:

我对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中进行编译优化。有什么理由我应该使用一个而不是另一个吗?

这甚至是相关的吗?

1 个答案:

答案 0 :(得分:9)

  

匿名函数VS const函数

据推测,你正在比较

var func = function() { };
// or
let func = function() { };

const func = function() { };

这样做的主要原因不是优化。它通过代码记录您永远不打算更改func,并让引擎保护您不会意外这样做。 (我还应该注意到,从ES2015开始,这些函数的 none 是匿名的。它们都具有名称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等。

您的第二个示例与您的第一个示例不同,但三个重要方式:

  1. 它将函数引用赋给常量。

  2. 它使用箭头函数,而不是function函数(由于缺少一个更好的术语,我将称之为“简单”函数)。

  3. 您的箭头函数版本返回调用alert的结果(因为您在箭头函数上使用了concise body)。您的声明版本没有。

  4. 我们已经处理了#1的任何表现方面。我怀疑,#3不太重要。

    <#> Re#2(它是箭头函数):调用箭头函数比调用简单函数(理论上)所需的工作少。引擎不必设置arguments伪对象,也不必创建this绑定。但是如果箭头函数使用this,它需要更多工作来查找它(它就像函数关闭的外部作用域中的变量)。但同样,这就是理论;只要副作用不明显,发动机就可以优化。例如,如果您不在代码中使用arguments,现代引擎无论如何都会避免创建它,即使对于简单的函数也是如此。我希望围绕this的箭头函数使用的优化非常好,因为一旦函数存在,它们看到的this就不会改变。

    所以(等待它):这取决于。