可能重复:
JavaScript:var functionName = function() {} vs function functionName() {}
这两个功能有什么区别
function a()
{
b=2;
alert(b);
}
a();
和这个功能
var a=function()
{
b=2
alert(b);
}
a();
主要区别是什么
可能重复:
JavaScript:var functionName = function() {} vs function functionName() {}
这两个功能有什么区别
function a()
{
b=2;
alert(b);
}
a();
和这个功能
var a=function()
{
b=2
alert(b);
}
a();
主要区别是什么
主要区别在于,当您声明函数时:
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');
};
您将看到(如提到的 jsfiddle中所述),该a()
函数甚至在实际声明之前被正确调用,但b()
在分配之前不可用。
唯一真正的区别是第二个函数没有名称,而第function a() {}
一个函数被提升了。
不同之处在于函数 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>