0

可能重复:
JavaScript:var functionName = function() {} vs function functionName() {}

这两个功能有什么区别

function a()
{
    b=2;
    alert(b);
}
a(); 

和这个功能

var a=function()
{
    b=2
    alert(b);
}
a();

主要区别是什么

4

3 回答 3

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');
};​

您将看到(如提到的 jsfiddle中所述),该a()函数甚至在实际声明之前被正确调用,但b()在分配之前不可用。

于 2012-10-24T21:14:07.463 回答
0

唯一真正的区别是第二个函数没有名称,而第function a() {}一个函数被提升了。

于 2012-10-24T21:14:17.133 回答
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>
于 2012-10-24T21:17:30.317 回答