如何申报职能

时间:2012-10-24 21:12:03

标签: javascript function declaration

  

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

这两个功能有什么区别

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

和这个功能

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

主要区别是什么

3 个答案:

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