【发布时间】:2015-11-25 12:01:13
【问题描述】:
最近我开始研究 JS 库 Typeahead 作为预测搜索框的解决方案。然而,在查看实现它的代码后,我开始更深入地研究事物,并导致我在 javascript 中声明函数。
我知道有 3 种主要方法可以实现这一目标:
- 函数声明
- 函数表达式
- 函数构造
仔细查看function expressions,然后将我带到anonymous functions。我对这些的理解是,它们实际上是一个没有名字的function expression?
我的问题是关于命名函数表达式和匿名函数之间的区别,我为什么要选择使用匿名函数?匿名函数有什么好处(如果有的话)?
如果您在下面看到(我知道这是一个非常简单的示例),他们似乎在做完全相同的事情?我似乎无法区分它们。
//Named function expression
var add = function add(a,b){
var result = a+b;
console.log('adding ' + a + ' and ' + b + ' = ' + result);
}
add(6,2);
//Anonymous function expression
var multiply = function(a,b){
var result = a*b;
console.log('multiplying ' + a + ' by ' + b + ' = ' + result);
};
multiply(10,6);
//Named function called immediately
var divide = function myfunction(a,b){
var result = a/b;
console.log('dividing ' + a + ' by ' + b + ' = ' + result);
}(10,5);
//Anonymous function called immediately
var subtract = function (a,b)
{
var result = a - b;
console.log('subtracting ' + b + ' from ' + a + ' = ' + result);
}(10,5);
顺便说一句,这是导致我写这篇文章的问题:Explanation of Typeahead.js substringMatcher function
在代码中作者使用了一个匿名函数。无论如何,如果有人能为我解决这个问题,我将不胜感激。在你问之前,我确实已经用谷歌搜索过这个并被带到各种不同的网站,概述了这些差异,但我更愿意在这里问社区。p>
【问题讨论】:
-
不喜欢命名函数表达式的一个原因是IE up to version 8 makes them global variables。也许如果这不是浏览器开发的一个特性,只要它是在语言爆炸式流行的时候,你就会看到更多的命名表达式。
标签: javascript anonymous-function function-expression