这个标题概括了我的问题。提供一个能够展示这一观点的例子会很好。
这个标题概括了我的问题。提供一个能够展示这一观点的例子会很好。
首先,JavaScript中似乎没有关于内联函数的共识定义。我认为内联函数是JavaScript函数的一种特殊情况。一个内联函数是指在运行时创建的分配给变量的函数,而不是在解析时创建。
匿名函数和内联函数实际上是相同的,因为它们都是在运行时创建的。区别在于内联函数分配给变量,因此可以重复使用。这样,内联函数与常规函数的工作方式相同。
在es6之前,匿名函数和内联函数类似于常规函数一样使用函数关键字声明。随着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'));
内联函数有所不同,引用自维基百科:
内联函数是一种编译器被要求执行内联扩展的函数。换句话说,程序员已经请求编译器在每个调用该函数的地方插入完整的函数体,而不是生成调用该函数的代码在它定义的一个地方。编译器没有义务遵守这个请求。
Javascript不支持内联函数的概念。但我在网上找到了一些关于回调函数的参考,例如:
(function(){
setTimeout(/*inline function*/function(){ /*some code here*/ }, 5);})
();
这些被称为内联函数。正如您所见,这些函数没有任何名称,因此它们与匿名函数本质上是相同的。我认为,由于您在使用它的地方定义了该函数,因此它被内联函数引用,但名称“匿名函数”最好描述了该概念。
匿名函数的定义方式如下
var x = 1;
(function(x){
// Do something
console.log(x); // 1
})(x);
Inline function
var foo = function (){
alert('Hello')
}
setTimeout(foo, 100);
匿名函数
setTimeout(function(){
alert('Hello')
}, 100);
他们在做同样的事情,但是内联函数更适合重复使用。匿名函数适用于一次性使用,因为您不需要担心它的名称会与其他变量冲突,而且它更短。
所以这取决于您的情况。
function() {};
和命名函数:function foo(x) {};
。然后,还有函数引用:var foo = function() {};
。在这个例子中,引用指向一个匿名函数!你也可以引用一个命名函数:var foo = function bar() {};
。最后,还有回调函数:foo.test(function() {});
(同样是匿名的 - 但也可以是命名的!),它们也可以通过引用传递(并且是闭包)。 - Ben