JavaScript函數表達式與函數聲明

什麼是函數?編程

  函數是事件驅動或者被調用時執行的重複代碼塊。函數

做用域:spa

  1. 全局做用域code

  2. 函數做用域(局部做用域)blog

var i = 100;     //全局做用域
    function fun(){
    var j = 10;        //局部做用域
    console.log(i + j);
}
fun();

  全局做用域與函數做用域是相對的,好比:事件

  i是全局做用域,j和k是函數做用域,而j是k的全局做用域。作用域

var i = 100;     //全局做用域
    function fun(){
    var j = 10;        //局部做用域
    function fun2(){
        var k = 20;
    }
}
fun();

使用var關鍵字聲明的變量不是全局就是局部,不是var聲明的變量都是全局變量。io

function fun(){
    j = 10;        //局部做用域
    function fun2(){
        var k = 20;
    }
}
fun();
console.log(j);
console.log(k)

返回值 j = 10;console

    k is not defined!function

函數的表達式:

var fun1 = function fun(){
     console.log("hello");  
}

  函數表達式:將函數賦給fun1以後函數名fun將被放棄,這意味着後面對函數的調用,只有fun1有效,而fun是無效的,他只有在返回函數名的以後,纔有fun名稱。

        fun1.name  ---->fun      

        fun.name  ---->fun is not defined !

        fun1.length ----->5     

        fun.length ----->fun is not defined !

函數的聲明:

function fun2(){
     console.log("world");  
}

區別:

  函數表達式能夠直接被執行符號執行,而函數聲明不能,只有函數聲明轉換爲函數表達式是才能夠被執行符號執行。

  函數聲明變爲函數表達式,只須要在前面添加"+","-","!"這三種中的其中一個就行。

+function fun(){    //函數聲明 ,在函數的前面能夠加上+ - !能夠讓函數聲明變成函數表達式
    console.log("hello");
}()
var fun2 = function(){    //函數表達式
    console.log("world");
}()

當即執行函數:

  好處:避免寫全局變量,全部的內容所有都卸載當即執行函數中。

  當即執行函數必須是函數表達式。

  當即執行函數的兩種表現形式:

  1. (function(){})()

  2. (function(){}())

  二者在功能上沒有什麼區別,主要看編程人員的習慣。

相關文章
相關標籤/搜索