函數聲明和函數表達式的區別

函數表達式和函數聲明的區別

/*              
                  同一做用域下的函數聲明會提高, 因此能夠在函數聲明的位置前面調用函數
                  函數表達式則不能
            */
         sayHello(); // 能夠運行
         console.log(sayHello.toString());
         // sayHi(); // 報錯
         function sayHello() {
               console.log("hello");
         }

         var sayHi = function() {
               console.log("hi");
         }

         var Greet = function() {
               greet();
               console.log(greet.toString());

               function greet() {
                     console.log('greet Statement');
               }
               var greet = function() {
                     console.log("greet Expression");
               }
         }
         Greet();

特殊狀況

/*
               *條件式函數聲明跟函數表達式的處理方式同樣。所以,條件式函數聲明喪失了函數聲明提高的特性*      
         */
         // statement(); //Uncaught TypeError: statement is not a function
         if (true) {
               function statement() {
                     console.log("statement");
               }
         } else {
               function statement() {
                     console.log("statement2");
               }
         }
         statement();
相關文章
相關標籤/搜索