【问题标题】:What is the difference between anonymous and inline functions in JavaScript? [closed]JavaScript 中的匿名函数和内联函数有什么区别? [关闭]
【发布时间】:2013-10-03 12:51:26
【问题描述】:

标题总结了我的问题。一个说明这一点的例子会很好。

【问题讨论】:

  • 你的猜测,假设是什么?给我们吃点东西。
  • 我看不出这个问题应该被否决的任何理由。
  • andrewb:我目前的理解是内联函数是具有名称的匿名函数......函数能够在递归中调用自身的原因。请注意,我是 JavaScript 新手,仍在学习。虽然我有使用 C# 和 .NET 的经验,所以我的这一切都是一种新的思维转变。
  • 已关闭所以无法回答,但这里的每个人都很困惑。匿名和内联函数不是对立的。 JS 没有内联函数。有匿名函数:function() {}; 和命名函数:function foo(x) {};。然后,还有函数referencesvar foo = function() {};。在那个例子中,引用是一个匿名函数!您还可以引用命名函数:var foo = function bar() {};。最后,还有回调函数:foo.test(function() {});(同样,匿名 - 但可以命名!)也可以通过引用传递(并且是闭包)。
  • 投票重新打开,因为这个话题是话题,而且有些人不应该有审核权限。

标签: javascript function inline anonymous


【解决方案1】:

首先,对于 JavaScript 中的内联函数似乎没有统一的定义。我认为 inline 函数是 JavaScript 函数的特例。 内联函数是分配给在运行时而不是在解析时创建的变量的函数。

匿名函数和内联函数实际上是相同的,因为它们是在运行时创建的。不同之处在于内联函数被分配给一个变量,因此它可以被重用。这样,内联函数的工作方式与常规函数相同。

在 es6 之前,匿名和内联函数的声明与使用 function 关键字的常规函数​​类似。随着 es6 的出现,匿名和内联函数也可以用更紧凑的arrow function 语法声明。

功能

function func() {
    alert ('function');
} 
$('a').click(func);

内联函数

var func = function() { 
    alert ('inline') 
};
$('a').click(func);

// Alternative es6+ inline arrow function.
let func2 = () => alert('inline');
$('a').click(func2);

匿名函数

$('a').click(function() {
    alert('anonymous');
});
// Alternative es6+ anonymous arrow function.
$('a').click(() => alert('anonymous'));

【讨论】:

  • 仅供参考,关于性能损失的链接有点不确定。也许 7 年后可以肯定地假设在性能方面没有太大差异?
  • 同意@bluenote10。至少它是题外话。
  • “在运行时/解析时创建”是什么意思?所有 javascript 函数都是运行时对象;尤其如此,因为它们是闭包。如果它们碰巧通过内联或其他方式从程序中删除,那是一个实现细节。
【解决方案2】:

内联函数有些不同,引用自维基百科:

内联函数是要求编译器执行内联扩展的函数。换句话说,程序员要求编译器在每个调用函数的地方插入完整的函数体,而不是在定义的地方生成代码来调用函数。编译器没有义务尊重这一要求。

Javascript 不支持内联函数的概念。但我在 web 中找到了一些引用,其中回调如下:

(function(){
  setTimeout(/*inline function*/function(){ /*some code here*/ }, 5);})
();

称为内联函数。如您所见,这些函数也没有任何名称,因此它们本质上与匿名函数相同。我认为,由于您正在定义使用它的函数,它已被内联函数引用,但名称“匿名函数”最能描述这个概念。

【讨论】:

    【解决方案3】:

    匿名函数是这样定义的

    var x = 1;
    (function(x){
        // Do something
        console.log(x); // 1
    })(x);
    

    但是,内联函数的定义对我来说有点不清楚。

    【讨论】:

      【解决方案4】:

      内联函数

      var foo = function (){ 
         alert('Hello') 
      }
      setTimeout(foo, 100);
      

      匿名函数

      setTimeout(function(){ 
         alert('Hello') 
      }, 100);
      

      他们在做同样的事情,但是当你想重用内联函数时会更好。 Anonymous 适合一次性使用,因为您不必担心它的名称是否会与其他变量冲突,而且它更短。

      所以这取决于你的情况。

      【讨论】:

      • 匿名函数在 javascript 中作为 OOP 的一部分被广泛重用。也可以查看 coffescript 生成的 javascript 作为证据。
      猜你喜欢
      • 1970-01-01
      • 2017-04-04
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 2019-09-15
      • 2011-03-24
      相关资源
      最近更新 更多