JavaScript入門-函數function(一)

js函數(function)

function的英文是[功能],[數] 函數;職責;盛大的集會的意思
在js裏,就是函數的意思。在Java裏叫作方法。es6

定義函數

function fun(參數){
        //函數體
        //return無關緊要,根據實際要求加或不加
    }

使用函數

//函數名()
    fun();

ps:在js裏,咱們的方法能夠先調用後聲明,也就是調用寒素的代碼能夠寫在定義函數的前面。數組

實參、形參

實參:簡單理解就是實際的參數,在調用函數的時候傳的
形參:簡單理解就是在定義函數時,用來接收調用時傳的值函數

var n1=123 , n2=456
    //調用函數
    fun(n1 , n2)

    //定義函數
    function fun( a , b){
        a += 100
        b += 100
        console.log(a , b)
    }
    console.log(n1 , n2)
    
    //運行結果:223 , 556
    //123 , 456

ps:咱們能夠看出,實參和形參並非同一個變量this

不太嚴謹的參數列表

先看一段代碼:es5

function fun(a , b , c){
        console.log(a*10 , b+10 , c-10)
    }
    //調用
    fun(1,2,3)//輸出結果10,12,-7
    //這裏是沒毛病的,正常輸出

    //可是下面這個調用呢???
    fun(20,2)
    fun()
    fun(12,32,14,5)

ps:上面的寫法,都不會報錯...若是不信能夠本身試試。code

  1. 咱們在定義函數的時候,定義了多少個參數,按道理來講,就應該嚴格按照規範傳參,可是沒辦法,js裏比較‘寬容’,你傳了多少個參數,就接收多少個參數
  2. 若是多傳了就無視你多傳的參數,從第一個','前的參數爲第一個參數算
  3. 若是少傳了,沒有傳的那幾個參數,就爲undefined。都沒傳那就值都爲undefined

return關鍵字

首先,在js裏,並無規定函數在定義的時候,必定要有返回值或者返回值類型這一說法,很活躍的,你想返回什麼結果均可以
其次,若是要返回結果或者結束函數體,就要用到return關鍵字對象

  1. return用於返回函數的值給調用者
  2. return一旦執行,則立馬結束當前的函數,注意:必須時返回具體的值纔會結束(能夠思考一下遞歸調用)
  3. return函數中能夠有多個,返回不一樣條件下的值。好比在switch中,每一個case後面能夠用return返回具體的值

arguments

在es5裏,arguments是一個對象,用來接收全部的參數,用法和數組一致;不過目前已被廢棄,有更好的代替它
es6:(推薦使用)遞歸

function fun( n1, n2, ...args ){
        //args只能接收n2後面的數
        //用...接收的就是一個數組,能夠遍歷
    }

ps:...後面不必定要寫args,能夠本身隨便命名,符合字符串規範就行。通常用args表示字符串

關於...args的用法

  1. args不能放在參數列表的前面
  2. args有且只有一個

關於函數的耦合問題

先看代碼:it

var num = 100
    var res = fun(1)
    //定義函數
    function fun(n){
        console.log( num + n )
    }
    //輸出爲101

ps:上面的代碼運行結果沒問題,可是,耦合度很高,由於在函數體內,用全局變量運算,這就很忌諱,若是項目要移植,這些用到的變量就會拖泥帶水的,耦合度高。這在之後的工做中這麼幹容易被炒魷魚...
注意:若是要使用,傳參數就行了,千萬別使用全局變量

函數名的問題

var f = function fun(){
        console.log("my name is rainbow")
    }  
    console.log(f)

ps:咱們把一個函數體,賦值給了一個變量,那麼這個變量打印出來會怎麼樣呢?
結果:並不會報錯,而是直接打印出了整個函數體的內容。咱們能夠這麼想,調用函數的時候,咱們寫的是fun(),也就是 函數名() 就變成了調用了。其實,js裏面還真是這麼幹的,函數名加括號就是調用了一次函數。
在這裏,你們和我想一個問題,這個方法體賦值給了變量,那這個變量是什麼類型呢???

匿名函數

簡單理解就是,你要使用一個函數,可是這個函數沒有名字,這要怎麼使用呢。
很簡單,上面不是說了嗎?

  • 調用函數就是 函數名()
  • 而又由於 函數名 = 方法體
  • 那麼 方法體() = 函數名()
    這樣就調用了一次函數
var a = 10;
    var b = 20;****************
    var f = function(){
        console.log(n1+n2)
    };
    f(a,b)//輸出結果30

自執行函數

  • 自執行函數就是本身定義本身執行
    這個就是匿名函數的應用
(function(){
        console.log('this is rainbow !')
    })();
    例子
    var a = 10;
    var b = 20;
    (function( n1 , n2 ) {
        console.log( n2 + n1)
    })(a ,b);
    //輸出結果爲30

ps:

  • 自執行函數的函數體必需要用()包起來。建議最後加上分號';'
  • 自執行應用場景通常在一些類庫
相關文章
相關標籤/搜索