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

时间:2013-10-03 12:51:27

标签: javascript function inline anonymous

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

4 个答案:

答案 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);

他们正在做同样的事情,但如果你想重用它,内联函数会更好。匿名有利于一次性使用,因为你不必担心它的名字是否会与其他变量冲突,而且它更短。

所以这取决于你的情况。