JavaScript中匿名函数和内联函数的区别是什么?

JavaScript中匿名函数和内联函数的区别是什么?,javascript,function,inline,anonymous,Javascript,Function,Inline,Anonymous,标题概括了我的问题。一个演示这一点的例子会很好。内联函数 var foo = function (){ alert('Hello') } setTimeout(foo, 100); 匿名函数 setTimeout(function(){ alert('Hello') }, 100); 他们在做同样的事情,但是当您想要重用内联函数时,内联函数会更好。Anonymous适合一次性使用,因为您不需要担心它的名称是否会与其他变量冲突,而且它更短 所以这取决于您的情况。匿名函数的定

标题概括了我的问题。一个演示这一点的例子会很好。

内联函数

var foo = function (){ 
   alert('Hello') 
}
setTimeout(foo, 100);
匿名函数

setTimeout(function(){ 
   alert('Hello') 
}, 100);
他们在做同样的事情,但是当您想要重用内联函数时,内联函数会更好。Anonymous适合一次性使用,因为您不需要担心它的名称是否会与其他变量冲突,而且它更短


所以这取决于您的情况。

匿名函数的定义如下

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

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

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

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

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

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

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

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

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

这些函数称为内联函数。正如您所看到的,这些函数也没有任何名称,所以它们本质上与匿名函数相同。我想,既然您在使用函数的地方定义了函数,它就被内联函数引用了,但是“匿名函数”这个名称最能描述这个概念。

您的猜测是什么,假设是什么?给我们一些东西。我看不出为什么这个问题应该被否决。andrewb:我目前的理解是内联函数是匿名函数,具有名称。。。这是函数能够在递归中调用自身的原因。请注意,我是JavaScript新手,还在学习。我有C#和.NET的经验,所以我认为这是一个新的思维转变。关闭,所以无法回答,但这里的每个人都感到困惑。匿名函数和内联函数不是对立的。JS没有内联函数。有匿名函数:
function(){}和命名函数:
函数foo(x){}。然后,还有函数引用:
var foo=function(){}。在该示例中,引用的是匿名函数!您还可以引用一个命名函数:
var foo=function bar(){}。最后,还有回调函数:
foo.test(function(){})(同样,匿名-但可以命名!),也可以通过引用传递(并且是闭包)。投票决定重新打开,因为此主题是关于主题的,并且有人拥有审核权限,但不应该。匿名函数作为javascript中OOP的一部分被广泛重用。可以看到coffescript生成的javascript,以获取证据。仅供参考,给出的关于性能惩罚的链接有点不确定。也许7年后,我们可以安全地假设,在性能方面没有太大的差异?同意@bluenote10。至少它脱离了主题。你说的“在运行时/解析时创建”是什么意思?所有javascript函数都是运行时对象;这一点尤其正确,因为它们是闭包。如果它们碰巧通过内联或其他方式从程序中删除,这就是实现细节。
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'));
(function(){
  setTimeout(/*inline function*/function(){ /*some code here*/ }, 5);})
();