js基礎函式(下)(小白自用5)

thomas~發表於2021-01-02

儲存對程式碼的熱愛,並儲存懷疑態度

入口 - 引數

  • 實參
  • 形參
  • 型別
  • 數量關係
    • 數量一致時:從左向右一一對應
    • 實參多:無法通過形參拿到多出來的實參,但是可以通過arguments拿到所有實參
    • 形參多:多出來的形參為undefined
function fn(a){   // 形參
    console.log(a);

}
fn(1)      //實參

一. arguments

  • 函式內部有一個隱藏物件,用來接收所有實參
  • 類陣列(偽陣列)
    • 具有的索引和長度的概念,但是不能使用陣列的某些操作
  • 利用陣列的索引和長度配合迴圈,獲取arguments中儲存的實參
    • 計算機中的索引從0開始
  • 應用場景:當函式的實參個數不確定時,可以使用arguments找到所有實參
function fn(a){   // 形參
   console.log(arguments);   //全部引數 ,得到時一個陣列 ,要想取得每個值可以用迴圈遍歷出來
    //if.html:57 Arguments(10) [1, 2, 3, 4, 5, 5, 6, 3, 4, 2]
    for(var i=0;i<arguments.length;i++){  //遍歷的是arguments的長度
        console.log(arguments[i])         //取出每個值 
    }
}
fn(1,2,3,4,5,5,6,3,4,2)      //實參

二. 出口 - 返回值

  • 關鍵字:return
    • 語法:return 要返回的資料或變數
    • return,不僅可以返回資料,還會終止當前函式
    • 所以,一個函式,只能執行一次return
    • 一個return後只能跟一個資料
  • 返回值的應用場景:
    1. 用來處理資料的函式,需要有返回值,返回處理之後的資料
    2. 實現功能的函式,沒有必要有返回值,但是可以寫
  • 沒有return的函式,會返回undefined
  • 可以返回所有型別的值
function fn(a){   // 形參
    console.log(arguments);   //全部引數 ,得到時一個陣列 ,要想取得每個值可以用迴圈遍歷出來
    //if.html:57 Arguments(10) [1, 2, 3, 4, 5, 5, 6, 3, 4, 2, callee: ƒ, Symbol(Symbol.iterator): ƒ]
    var j=[]   //用來儲存arguments的值
    for(var i=0;i<arguments.length;i++){  //遍歷的是arguments的長度
        j+=arguments[i]      //取出每個值 
    }
    return   j;
}
console.log(fn(1,2,3,4,5,5,6,3,4,2) )     //實參    返回到執行函式身上了,也就是這個

三、作用域

- 變數生效的區域
- 全域性作用域,內的變數,叫全域性變數
    - 不屬於任何一個函式的區域
- 區域性作用域,內的變數,叫區域性變數
    - 某個函式內部的區域
- 區域性作用域可以使用全域性作用域的變數或資料(子可以拿父)
- 全域性作用域不能使用區域性作用域的變數或資料(父不能拿子)
- 全域性變數的生命週期
    - 隨著程式的啟動被建立,程式完全結束後,才會被刪除
    - 相對區域性來說,比較佔空間
- 區域性變數的生命週期
    - 隨著作用域的開啟被建立,作用域的結束被刪除
- 儘量少用全域性
    - 可以利用匿名函式生成獨立作用域,在匿名函式內再寫其他功能
(function(){
    var i=0;   //匿名函式會立即執行
})()

五、js的編譯和執行

  1. 提升
    • var宣告的變數會自動提前到作用域開始的位置,執行
      • 原位賦值
    • function宣告的函式,會整體提升到作用域開始的位置
      • 當前作用域只要定義了函式,無論位置,都能執行
    • 當var遇到function
      • 賦值式建立函式
      • var的變數和function的函式名重名

相關文章