1. 程式人生 > >js學習總結----函數

js學習總結----函數

索引 知識 結束 開始 總結 小括號 接收 ons 設定

一、函數基本知識

1、function:函數->具備某個功能的一個方法。方法本身是沒有什麽意義的,只有執行這個方法實現了對應的功能才有自己的價值。

2、函數由兩部分組成:創建一個函數、執行這個函數

  function 方法名(){

//函數體:存放的某個功能實現的JS代碼

  }

  方法名();

  創建一個函數可以執行多次,一般情況下,每次執行函數和上一次執行沒有任何的關系

function sum(){
            var total = null;
            total = 1 + 1;
            console.log(total)
        }
     sum// 後面不加小括號,代表的就是當前函數本身 sum(); //sum後面加小括號,代表的是執行當前函數 函數執行的目的:把函數之前存儲的那些字符串 變成js代碼,
          然後在讓js代碼從上到下的執行。

  創建一個函數的過程:

   1)、首先開辟一個新的內存空間,瀏覽器為其分配一個16進制的地址,我們假設地址為:xxxfff000

   2)、把函數體中的JS代碼當做"字符串" 存儲到內存空間中。

   3)、再把這個地址賦值給當前的函數名 sum->xxxfff000

  函數執行的過程

  1)、函數執行的時候,首先會提供一個供函數體中代碼執行的環境->私有作用域

  2)、把函數體中的代碼字符串變為代碼從上到下執行

  註意:函數在執行的時候,首先會形成一個新的私有作用域,供函數體中的代碼從上到下執行,形成的那個私有作用域,把我們函數體中的代碼都包起來了,保護裏面的私有變量,不受外界的幹擾,我們把函數執行的時候形成的這種保護機制叫做"閉包"

二、形參

  擴展:我們想把sum這個方法升級,隨便給我兩個數都能求和 ->形參 

function sum(num1,num2){//num1和num2 就是我們設定的形參“變量” 是當前函數的兩個入口
            var total = null;
            total = num1 + num2;
            console.log(total)
        }
        sum(100,200);//執行的時候  只需要把對應形參的值傳遞給函數即可
        sum(10) // num1 = 10  num2 = undefined 沒有傳遞的形參默認是undefined

三、return

  在函數裏面return 就是當前函數提供給我們的出口,因為不提供出口的話,閉包的機制導致了在函數體的外面

無法獲取裏面的值,如果想在外面使用裏面的值,值需要通過return 把total的值返回到外面即可--》“返回值機制”

  外面想用哪個值,我們就把哪個值返回 ->return total ;並不是把變量返回給外面,而是把變量存儲的值返回給外面

  var total = sum(100,200) // 首先把函數sum執行,然後把sum執行後的返回值(看sum執行的返回結果,只需要看sum中是否存在return,有return,return後面返回的值是什麽,那麽函數的返回值就是啥;如果sum中沒有return 那麽默認的返回值是undefined)賦值給外面的變量total

  在函數體中return 下面的代碼都不會執行了 ->終止函數體中代碼執行的作用

四、arguments

  "任意數求和":隨便給我幾個數(具體幾個不知道,就沒有辦法定義形參的個數),我都能求出和 

  arguments:函數天生自帶的(不管寫沒寫形參,也不管是否傳遞值,arguments始終都是存在的),用來接收函數傳遞進來的參數值的集合

  typeof arguments // object 它是一個對象數據類型的值,它是以數字作為索引,索引從零開始逐級遞增,索引0存儲的是第一個參數,索引1存儲的是第二個參數值,索引n存儲的是第n+1個參數值。。。有一個叫做length的屬性代表一共傳遞了多少個參數; 它不是數組,我們把它稱之為類數組

  callee:function sum ()... 它還有一個自己特殊的屬性callee,代表當前函數本身 

function sum(){
            var total = null;
            for(var i = 0;i<arguments.length;i++){
          var cur = Number(arguments[i])
          //對於非有效數字我們不在進行累加,防止最後結果是NaN
          if(isNaN(cur)){
       continue;
          }
total
+=cur; } return total; }

五、匿名函數

  實名函數:起了名字的函數就是實名函數

  匿名函數:沒有名字的函數 就是匿名函數

  在js中常用到的匿名函數有兩種方式:

    1)、自執行函數:定義函數和函數執行一起完成了

      ;(function(num){ 前面加;的作用是為了防止上面代碼結束不加;

      }(100))

    2)、函數表達式:把函數定義的部分當做一個值賦值給一個變量或者元素的某一個行為

      var f = function(){}

  

js學習總結----函數