标题总结了我的问题。一个证明这一点的例子很不错。
答案 0 :(得分:26)
首先,JavaScript中的内联函数似乎没有一致的定义。我认为内联函数是JavaScript函数的特例。 内联函数是分配给在运行时而不是在分析时创建的变量的函数。
匿名函数和内联函数几乎相同,因为它们是在运行时创建的。不同之处在于内联函数已分配给变量,因此可以重复使用。这样,内联函数的作用与常规函数相同。
function func() {
alert ('function');
}
$('a').click(func);
var func = function() {
alert ('inline')
};
$('a').click(func);
$('a').click(function() {
alert('anonymous');
});
与常规功能相比,匿名和内联功能可能会有性能损失。请参阅var functionName = function() {} vs function functionName() {}。
答案 1 :(得分:5)
内联函数有点不同,引自维基百科:
内联函数是已请求编译器执行内联扩展的函数。换句话说,程序员已经请求编译器在调用函数的每个位置插入函数的完整主体,而不是生成代码以在定义它的一个位置调用函数。编译器没有义务尊重此请求。
Javascript不支持内联函数的概念。但我在网上发现了一些回调如下的引用:
(function(){
setTimeout(/*inline function*/function(){ /*some code here*/ }, 5);})
();
称为内联函数。正如您所看到的,这些函数也没有任何名称,因此它们与匿名函数基本相同。我认为,既然你正在定义你正在使用它的函数,它已被内联函数引用,但名称“匿名函数”最能描述这个概念。
答案 2 :(得分:2)
匿名函数定义如下
var x = 1;
(function(x){
// Do something
console.log(x); // 1
})(x);
然而,内联函数的定义对我来说有点不清楚。
答案 3 :(得分:1)
内联功能
var foo = function (){
alert('Hello')
}
setTimeout(foo, 100);
匿名函数
setTimeout(function(){
alert('Hello')
}, 100);
他们正在做同样的事情,但如果你想重用它,内联函数会更好。匿名有利于一次性使用,因为你不必担心它的名字是否会与其他变量冲突,而且它更短。
所以这取决于你的情况。