Recentley我开始研究JS库Typeahead
作为预测搜索框的解决方案。然而,在查看实现它的代码时,我开始更深入地研究一些事情,这使我在javascript
中声明了函数。
我知道有三种主要方法可以实现这一目标:
仔细查看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>
答案 0 :(得分:2)
命名函数表达式可以递归调用自身。此外,它们的名称显示在堆栈跟踪中,这有助于调试。
除此之外,它只是代码风格的东西。
答案 1 :(得分:0)
虽然它的风格大多取决于你需要使用你的函数(API身份验证和调用)的方式和。但
使用函数表达式样式var add = function add(a,b)
,在调用函数之前,该函数实际上并未分配给add
。
使用function add()
,函数声明将被提升,并且函数会立即分配给add。
简而言之,函数声明可以随时调用,函数表达式不能在声明之前被调用。< / p>
试试这个:
add1(5);
var add1 = function(num) {
return num + 1;
};
然后: ADD2(7);
function add2(num) {
return num + 2;
};