0

最近,我开始研究 JS 库Typeahead作为预测搜索框的解决方案。然而,在查看实现它的代码后,我开始更深入地研究事物,并导致我在javascript.

我知道有 3 种主要方法可以实现这一目标:

  1. 函数声明
  2. 函数表达式
  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);

顺便说一句,这是导致我写这个的问题:Typeahead.js substringMatcher 函数的解释

在代码中作者使用了一个匿名函数。无论如何,如果有人能为我解决这个问题,我将不胜感激。同样在你问我之前,我确实已经用谷歌搜索了这个并被带到了各种不同的网站,概述了这些差异,但我更愿意在这里问社区。

4

2 回答 2

2

命名函数表达式可以递归地调用自己。此外,它们的名称显示在有助于调试的堆栈跟踪中。

除此之外,它只是一个代码风格的东西。

于 2015-11-25T12:02:58.773 回答
0

虽然它主要是样式,但它可以根据您需要使用函数(API 身份验证和调用)的方式和时间而有所不同。

使用函数表达式 style ,函数在被调用之前var add = function add(a,b)实际上不会被分配。add

使用function add(),函数声明被提升并且函数被立即分配给 add。

简而言之,函数声明可以随时调用,函数表达式在声明之前不能调用。

尝试这个:

add1(5);

var add1 = function(num) {
  return num + 1;
};

然后这个: add2(7);

function add2(num) {
  return num + 2;
};
于 2015-11-25T12:27:17.170 回答