funObj closure

6.7 函數(shù)對象及閉包學(xué)習(xí)

 * 24.函數(shù)對象
 * 25.匿名函數(shù)
 * 26.閉包
函數(shù)對象

創(chuàng)建函數(shù)對象:3種:

  1. 聲明方式創(chuàng)建:
    只有以聲明方式創(chuàng)建的函數(shù)才能被hoist(聲明提前)
    function 函數(shù)名(參數(shù)列表){函數(shù)體;return 返回值};
  2. 函數(shù)直接量:
    var 函數(shù)名=function (參數(shù)列表){函數(shù)體;return 返回值};
  3. 實(shí)例化對象: 參數(shù)名和函數(shù)體都是字符串
    var 函數(shù)名=new Function(
    "參數(shù)名1","參數(shù)名2",...,"函數(shù)體; return 返回值");
function one (a,b){
  return a+b;
}

var two = function (a,b) {
    return a+b;
}

var three = new Function(
    'a','b','return a+b;'
);

arguments對象:接收所有傳入函數(shù)的參數(shù)值的類數(shù)組對象
默認(rèn)所有函數(shù)都會自動創(chuàng)建,直接可用。
類數(shù)組對象:長得像數(shù)組的對象,不是數(shù)組類型的實(shí)例(對象)
arguments instanceof Array -->false

function ar() {
    if (arguments.length==1){
        console.log('length=1');
    }else if(arguments.length==2){
        console.log('length=2');
    }
    console.log(arguments instanceof Array);    //false
}
ar(1);
ar(1,2);
匿名函數(shù)

沒有函數(shù)名的函數(shù)定義
沒有任何變量引用
何時:只要一個函數(shù)只執(zhí)行一次時,就用匿名函數(shù)。
執(zhí)行完,立刻釋放!
為什么使用:匿名函數(shù)沒有變量引用,調(diào)用完自動釋放!
缺點(diǎn):不可重用!
如何使用:2種:

  1. 匿名函數(shù)自調(diào): 定義后立刻調(diào)用
    何時使用:只要一個函數(shù)只執(zhí)行一次時
    如何使用:
    (function([參數(shù)列表]){
    函數(shù)體;
    return 返回值
    }([參數(shù)值列表]));
  2. 回調(diào):將函數(shù)作為對象傳遞給其他函數(shù),由其它函數(shù)調(diào)用
//自調(diào)
(function(){
    console.log("111");
})();

//回調(diào)
var arr = [1,9,3,7];
arr.sort(function(a,b){
    return a-b;
});
console.log(arr);
閉包

判斷閉包:3特點(diǎn):

  1. 內(nèi)外層函數(shù)嵌套

  2. 內(nèi)層函數(shù)必須使用了外層函數(shù)的局部變量

  3. 外層函數(shù)將內(nèi)層函數(shù)返回到外部,可在外部調(diào)用

    判斷閉包結(jié)果:2句話:

  4. 外層函數(shù)調(diào)用了幾次,就有幾個受保護(hù)的局部變量副本

  5. 同一次外層函數(shù)調(diào)用返回的內(nèi)部函數(shù)對象,操作同一個變量

    閉包: 實(shí)現(xiàn)可重用的局部變量,且保護(hù)其不受污染的機(jī)制

function f1(){
    var i = 1;
    function  f2(){
        i++;
        console.log(i);
    }
    return f2;
}
var rs = f1();
rs();//局部變量,重用
rs();
rs();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,686評論 9 118
  • 86.復(fù)合 Cases 共享相同代碼塊的多個switch 分支 分支可以合并, 寫在分支后用逗號分開。如果任何模式...
    無灃閱讀 1,551評論 1 5
  • 三、閉包和高階函數(shù) 3.1 閉包 3.1.1 變量的作用域 所謂變量的作用域,就是變量的有效范圍。通過作用域的劃分...
    梁同學(xué)de自言自語閱讀 1,551評論 0 6
  • 要點(diǎn): 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍?、屬性?..
    victorsungo閱讀 1,695評論 0 6
  • 我見到的很多大學(xué)生在大學(xué)里并沒有碌碌無為,他們是充滿斗志的一群人。 社團(tuán)里忙東忙西,只因?yàn)榇蠹业耐粋€愛好 學(xué)生會...
    美梁閱讀 246評論 0 0

友情鏈接更多精彩內(nèi)容