1. 程式人生 > >函式作用域及函式表示式

函式作用域及函式表示式

一、函式作用域

  在JavaScript中,作用域分為全域性作用域及函式作用域(區域性作用域);

  例如:

var num = 100;
            function fun(){
                console.log(num)
                var num1 = 200;
                function fun2(){
                    console.log(num1);
                }
            }
            fun()

  執行後都會正常輸出num及num1的值,
  用var定義的變數,在函式外定義的為全域性變數,在函式內定義的為區域性變數,作用域有所不同,但全域性變數是相對的,如上對num1的定義對函式內的fun2函式同樣產生了全域性變數的效果。

function fun (){
                var num = 100;
            }
            fun();
            console.log(num);

  但如果是這樣,在函式裡面定義在函式外面輸出,結果就是undefined。

function fun (){
                num = 100;
            }
            fun();
            console.log(num);

  另外,如果變數不通過var來定義而是直接定義,那麼就是一個全域性變數,如上就會正常輸出。

 

二、函式宣告和函式表示式

  1、函式宣告和函式表示式分別是什麼

    我們常見的函式寫法如 function fun(){ } 這樣的稱之為函式宣告

                                         fun = function (){ } 這樣的稱之為函式表示式

  2、函式宣告和函式表示式的區別

    對於函式表示式而言,函式名可有可無,而對於宣告函式,需通過函式名來呼叫;

    函式表示式可以直接被執行符號執行:

var fun2 = function(){    //函式表示式
                console.log("world");
            }()

    那麼對於函式宣告就不能這麼執行了,但是,在函式宣告前面加上+-!可以讓函式宣告變成函式表示式:

+function fun(){    //函式宣告
                console.log("hello");
            }()
//            在函式的前面可以加上+-!可以讓函式宣告變成函式表示式

  3、立即執行函式

    什麼是立即執行函式:函式聲明瞭以後直接自己執行,用函式的返回值,適合做初始化的工作。

    如:

+function(){        //立即執行函式
                console.log("hello")
            }()

    這就是一個立即執行函式;

    

    當立即執行函式中引數並沒有給定的時候,輸出引數為undefined

function fun(a,b){
                console.log(a);
                console.log(b)
            }
            fun(3)

    如上,輸出的a為3,輸出的b為undefined。

    

    另外,例如:

var abc = "helloworld"
        
            (function(){    //寫功能型的時候,在立即執行函式前面加上分號
                console.log(456)
            })()

    這樣在執行的時候會報錯,

    在JavaScript中,一般情況未新增的“;”會自動補全,但是在寫功能性的時候注意,在立即執行函式前面加“;”。