首页  >  问答  >  正文

javascript - Js 函数声明和函数表达式

`alert(sum(10,10));
var sum=function(num1,num2){

   return num1+num2;

};`
为什么报错,不是有变量提升吗

世界只因有你世界只因有你2663 天前855

全部回复(4)我来回复

  • phpcn_u1582

    phpcn_u15822017-07-05 10:57:27

    在我们写js code 的时候,我们有2中写法,一种是函数表达式,另外一种是函数声明方式。
    我们需要重点注意的是:

    只有函数声明形式才能被提升。

    1、函数声明形式 【成功】

    function myTest(){ 
        foo(); 
        function foo(){ 
            alert("我来自 foo"); 
        } 
    } 
    myTest();
    

    2、函数表达式方式【失败】

    function myTest(){ 
        foo(); 
        var foo =function foo(){     // 看这里
            alert("我来自 foo"); 
        } 
    } 
    myTest();
    

    看我这篇: http://www.jianshu.com/p/85a2...

    回复
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-07-05 10:57:27

    函数表达式不会提升。

    看一遍《javascript高级程序设计》吧。

    回复
    0
  • phpcn_u1582

    phpcn_u15822017-07-05 10:57:27

    声明和表达式是不一样的,声明的话不光定义会提前,赋值也会提前赋好,而表达式不会,举个栗子:

    a();
    function a(){}; //等同于
    var a = function(){};
    a();
    ///////对于表达式有
    a();
    var a = function(){}; //等同于
    var a;
    a();
    a = function(){}; //简单来讲就是表达式的赋值必须要等程序运行到相关行的时候才会进行

    回复
    0
  • ringa_lee

    ringa_lee2017-07-05 10:57:27

    同楼上,你的函数创建方式是函数字面量形式,改成

    alert(sum(10,10));
    function sum(num1,num2){
        return num1+num2;
    }

    就行了

    回复
    0
  • 取消回复