函数闭包的应用

1、函数的使用

  • 函数中的几个属性
function f1(x, y){
  console.log(f1.name);// 函数的名字
  console.log(f1.length);// 函数定义中的参数个数
  console.log(f1.arguments.length);// 实参的个数
  console.log(f1.caller);// 函数的调用者
}
  • 函数作为参数使用
function sortFn(ele1, ele2){
    if (ele1 > ele2){
        return 1;
    }
    if (ele1 == ele2){
        return 0;
    }
    return -1;
}
var arr = [10, 30, 65, 35, 66, 90, 86];
arr.sort(sortFn);
console.log(arr);
  • 函数作为返回值使用
//  判断给定的对象是不是某个指定的类型
function judgeType(type){
  //  函数作为返回值
  return function (obj){
    return Object.prototype.toString.call(obj) == type;
  }
}

var ff = judgeType("[object Array]");
var result = ff([10, 20, 30]);
console.log(result);

例:文件排序

function File(name, size, time){
    this.name = name;
    this.size = size;
    this.time = time;
}

var file1 = new File("Jack.avi", "200M", "2007-08-31");
var file2 = new File("Tom.avi", "300M", "2000-08-31");
var file3 = new File("XiaoMing.avi", "100M", "2017-08-31");

var fileArr = [file1, file2, file3];

/**
 * 按照指定的属性对文件进行排序
 * @param attr 属性
 * @returns {(function(*, *): (number))|*}
 */
function sortFile(attr){
    return function getSort(obj1, obj2){
        if (obj1[attr] > obj2[attr]){
            return 1;
        } else if (obj1[attr] == obj2[attr]){
            return 0;
        } else {
            return -1;
        }
    }
}

//var mySort = sortFile("time");
var mySort = sortFile("name");
//var mySort = sortFile("size");
fileArr.sort(mySort);
console.log(fileArr);

2、函数闭包

在函数A中存在一个函数B,函数B可以访问函数A中的变量,此时就形成了一个闭包。

  • 闭包的模式
    函数式的闭包、对象式的闭包。
  • 闭包的作用
    延长作用域链,缓存数据
    可以在函数外部读取函数内部成员
    让函数内成员始终存活在内存中
2.1 函数式闭包
//  函数式的闭包
function f1(){
  var num = 10;
  function f2(){
    console.log(num);
  }
  f2();
}

f1();
2.2 对象模式的闭包
//  对象模式的闭包
function f3(){
  var num = 20;
  var obj = {
    count: num
  };
  console.log(obj.count);
}

f3();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值