JavaScript中的Function對象以及arguments對象詳解

一、函數本質

  • 函數本質上就是對象,函數名指向函數對象。
function f(){
    return 123;
}
var num = f();
var x = f;

這裏寫圖片描述

  • console.log(typeof f); //function

二、創建函數(共3種方法)

  • 直接使用function關鍵字聲明新的函數
function f1(){}
  • 使用Function對象創建
var f2 = new Function()
  • 匿名函數
var f3 = function(){}

三、arguments對象

  • arguments屬性是一個類數組對象,每個Function對象都具有該屬性
  • arguments屬性只在函數執行體內有效,從中可以讀取當前函數接收到的所有實參
  • 使用arguments對象可以處理可變數量的參數,從而解決JavaScript所不支持的多態性
  • 屬性:length:返回所傳入實參的個數
function add(num1,num2){
    return num1 + num2;
}
function add(num1,num2,num3){
    return num1 + num2 + num3;
}
console.log(add(10));       //NaN
console.log(add(10,20));    //NaN
console.log(add(10,20,30)); //60

由上面例子可以看出,JavaScript中不支持多態,下面用arguments來解決這個問題

function add(){
    var sum = 0;
    for(var i = 0 ;i<arguments.length;i++){
        sum += arguments[i];
    }
    return sum;
}
console.log(add(10));       //10
console.log(add(10,20));    //30
console.log(add(10,20,30)); //60

四、函數的種類

1、 標準自定義函數

  • 聲明提升(函數、變量)

2、 表達式函數

  • 傳遞性
var add = function(){
    console.log("ok");
}
var t = add ; //這裏傳遞的是內存地址
  • 本質:add是指向內存的指針,調用時是在指向的內存中把程序拿出來執行一次。

3、 嵌套函數

function a(){
    function b(){

    }
}
  • b()在外面不能被訪問
  • 要想在外面訪問b,要在程序中用return
function a(){
    function b(){

    }
    return b;
}

4、 匿名函數

  • function() {}
  • 只能立即調用
  • 匿名函數不需要起名字,少佔用變量;效率更高;主要用在你封閉作用域上

5、 回調函數

  • 把一個函數名作爲實際參數傳遞給另外一個函數
function a(){
    console.log("hello");
}
function print(fn){
    fn();
}
print(a);  //hello

6、 遞歸函數

  • 自己調用自己
  • 必須有個結束條件
  • 思想:要解決一個問題,必須先解決前一個問題,直至能解決的問題
var i = 1 ;
function a(){
    console.log(i++);
    if(i < 10){
        a();
    }
}
a();

7、 系統函數

  • setInterval()
  • setTimeOut()

8、 懶函數

  • 只做一次就變化的函數
  • 用途:優化JS性能、創建對象、處理兼容性……
function a(){
    console.log("hello")
    a = 5;
}
a(); //hello
a();  //會報錯
發佈了70 篇原創文章 · 獲贊 19 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章