标题总结了我的问题。一个证明这一点的例子会很好。
4 回答
首先,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'));
内联函数有些不同,引用维基百科:
内联函数是要求编译器执行内联扩展的函数。换句话说,程序员要求编译器在每个调用函数的地方插入完整的函数体,而不是在定义的地方生成代码来调用函数。编译器没有义务尊重这一要求。
Javascript 不支持内联函数的概念。但是我在 web 中找到了一些引用,其中回调如下:
(function(){
setTimeout(/*inline function*/function(){ /*some code here*/ }, 5);})
();
称为内联函数。如您所见,这些函数也没有任何名称,因此它们本质上与匿名函数相同。我认为,由于您正在定义使用它的函数,它已被内联函数引用,但名称“匿名函数”最能描述这个概念。
匿名函数是这样定义的
var x = 1;
(function(x){
// Do something
console.log(x); // 1
})(x);
但是,内联函数的定义对我来说有点不清楚。
内联函数
var foo = function (){
alert('Hello')
}
setTimeout(foo, 100);
匿名函数
setTimeout(function(){
alert('Hello')
}, 100);
他们在做同样的事情,但是当你想重用它时,内联函数会更好。Anonymous 适合一次性使用,因为您不必担心它的名称是否会与其他变量冲突,而且它更短。
所以这取决于你的情况。