javascript関数宣言と関数表現の違い:関数宣言の向上

4477 ワード

1、関数を定義する方法は2つあります.関数宣言と関数式、対応文法:
    :function funName(){}
     :var funName = function(){}
2、上記の2つの方法は、定義された文法の違い以外に、最も主要な違いは、関数宣言が「関数宣言の向上」という特徴を持っていて、関数宣言を作用ドメインのトップに引き上げます.コードを実行する前に関数宣言を読み取ります.つまり、関数宣言を関数呼び出しの後に置くことができます.以下は例を通して説明します.
 1:
            test();//  hello,  【      】   ,      ,             

            function test(){
                alert("hello");
            }


     2:
            test();//  :Uncaught ReferenceError: test is not defined

            //  【     】        ,      ,              
            //                   
            var test = function(){
                alert("hello");
            }

            test();//  hello



     3if(condition){
                function test(){
                    alert("hello");
                }
            }else{
                function test(){
                    alert("world");
                }
            }

            //  world,                  ,               ,     
            //      ,         
            test();

            if(condition){
                var test2 = function(){
                    alert("hello");
                }
            }else{
                var test2 = function(){
                    alert("world");
                }
            }

            //         ,                      
            test2();


     4//     
            var  test = function(){
                alert("hello");
            }
            //     
            test();

            //    
            var s = "world";

            //    
            function test(){
                alert(s);
            }
            //     
            test();

          :        hello,                 ,         ,    test      test,          hello
3、もう一つの関数の方式があります.自己実行関数は、機能領域の向上の特徴を持っていません.作用領域の読み取り関数もコードの実行順に読み取ります.文法と例は以下の通りです.
            //     ,       ,
            (function(){
                alert(s);//  undefined,             ,        s
            })();

            var s = "hello";