可能重复:
JavaScript: var functionName = function() {} vs function functionName() {}
这两个功能有什么区别
function a()
{
b=2;
alert(b);
}
a();
和这个功能
var a=function()
{
b=2
alert(b);
}
a();
主要区别是什么
答案 0 :(得分:3)
主要区别在于声明函数时:
function a(){
// something...
}
即使在声明它的代码中的位置之前,它也可以在相同的范围内访问。
但是当您为变量指定匿名函数时:
var a = function(){
// something...
};
在分配之前无法使用。
这是实际创建函数的结果。在第一种情况下,它是在编译代码时创建的,而在第二种情况下,在解释器到达赋值行时创建函数。
通过执行以下代码(jsfiddle),您可以看到我上面提到的差异:
try {
a();
} catch(e) {
alert('problem calling function a(): ' + e);
};
try {
b();
} catch(e) {
alert('problem calling function b(): ' + e);
};
function a(){
alert('function a() called');
};
var b = function(){
alert('function b() called');
};
您将看到(如在mentioned jsfiddle中),即使在实际声明之前,a()
函数也被正确调用,但在分配之前b()
不可用。
答案 1 :(得分:0)
唯一真正的区别是第二个函数没有名称,并且function a() {}
一个函数被悬挂。
答案 2 :(得分:0)
不同之处在于函数a()是在脚本块的分析时定义的,而var a = function()是在运行时定义的。
<script type="text/javascript">
// No errors occured;
function a();
function a(){
console.log("Success");
}
</script>
<script type="text/javascript">
// An error will occured;
a();
var a = function (){
console.log("Success");
}
</script>