搜尋

首頁  >  問答  >  主體

javascript - Js 函數宣告和函數表達式

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

   return num1+num2;

};`
為什麼報錯,不是有變數提升嗎

世界只因有你世界只因有你2742 天前899

全部回覆(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
  • 取消回覆