21

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

4

4 回答 4

35

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

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

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

功能

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'));
于 2013-10-03T13:02:25.290 回答
6

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

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

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

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

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

于 2013-10-03T13:09:46.970 回答
3

匿名函数是这样定义的

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

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

于 2013-10-03T13:00:42.737 回答
1

内联函数

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

匿名函数

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

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

所以这取决于你的情况。

于 2013-10-03T13:00:05.200 回答