左手抓右手

右手加左手

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

函数声明和函数表达式虽然都是在声明一个函数,但是二者有区别,解析器对二者的解析并非是一视同仁的。解析器会率先解析读取函数声明,并使其可以在执行任何代码前可用(可以访问);至于函数表达式,则必须等到解析器解析执行到它所在的行,才会被真正解释执行,才可被使用。如下代码所示:

<script type="text/javascript">
    alert(add(2,3));
    function add(a,b){
        return a+b;
    }
</script>

该段代码可以正常执行,因为add(a,b)是一个函数声明,解析器可以在任何地方解析执行这个函数。而下面的代码:

<script type="text/javascript">
    alert(2,3);
    var sum = function(a,b){
        return a+b;
    }
</script>

这段代码虽然也有输出,有执行,但并不是正确的执行了预期的功能。因为这段代码是一个函数表达式,必须确保解析器执行到了声明函数的这一行,才能被正确的调用,所以是本段代码是没有被正确执行的。

还有一个小的知识点,就是作为值的函数,如果要访问的是函数的指针,而不是执行函数的话,那么久必须去掉函数后面的那对圆括号。如下代码:

<script type="text/javascript">
    function callSomeFunction(someFunction,someArguments){
        return someFunction(someArguments);
    }
    
    function add10(num){
        return num+=10;
    }
    
    var result1 = callSomeFunction(add10,10);
    document.write(result1+"<br />");
    var result2 = add10(10);
    document.write(result2+"<br />");
</script>

传递给callSomeFunction的add10。

posted on 2012-06-26 14:51  yansj1997  阅读(293)  评论(0编辑  收藏  举报