Page 55 - 你不知道的JavaScript(上卷)
P. 55

使用:

                   foo(); // TypeError
                   bar(); // ReferenceError

                   var foo = function bar() {
                       // ...
                   };

               这个代码片段经过提升后,实际上会被理解为以下形式:

                   var foo;

                   foo(); // TypeError
                   bar(); // ReferenceError

                   foo = function() {
                       var bar = ...self...
                       // ...
                   }


               4.3 函数优先

               函数声明和变量声明都会被提升。但是一个值得注意的细节(这个细节可以出现在有多个
              “重复”声明的代码中)是函数会首先被提升,然后才是变量。

               考虑以下代码:

                   foo(); // 1

                   var foo;

                   function foo() {
                       console.log( 1 );
                   }

                   foo = function() {
                       console.log( 2 );
                   };

               会输出 1 而不是 2 !这个代码片段会被引擎理解为如下形式:

                   function foo() {
                       console.log( 1 );
                   }

                   foo(); // 1

                   foo = function() {
                       console.log( 2 );
                   };


               40   |   第 4 章
   50   51   52   53   54   55   56   57   58   59   60