15.js高级函数

1.惰性函数
惰性载入表示函数执行的分支只会在函数第一次掉用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了。
为了兼容各浏览器,对事件监听的的支持:

function addEvent (type, element, fun) {
    if (element.addEventListener) {
        element.addEventListener(type, fun, false);
    }
    else if(element.attachEvent){
        element.attachEvent('on' + type, fun);
    }
    else{
        element['on' + type] = fun;
    }
}

可以看到每次调用事件时都需要去查看各个分支,而我们使用惰性函数进行改进,在第二次的时候会重写该函数,以后就不需要再去走每个分支了。

function addEvent (type, element, fun) {
    if (element.addEventListener) {
        addEvent = function (type, element, fun) {
            element.addEventListener(type, fun, false);
        }
    }
    else if(element.attachEvent){
        addEvent = function (type, element, fun) {
            element.attachEvent('on' + type, fun);
        }
    }
    else{
        addEvent = function (type, element, fun) {
            element['on' + type] = fun;
        }
    }
    return addEvent(type, element, fun);
}

2.级联函数
级联函数又称链式调用,方法链一般适合对一个对象进行连续操作(集中在一句代码)。一定程度上可以减少代码量,缺点是它占用了函数的返回值。

function Person(){
 this.name="";
 this.age="";
 this.sex="";
}
Person.prototype={
//当改变原型对象时需要重新设置constructor
constructor:Person,
 setname:function(){
  this.name="katherine";
  return this;
 },
 setage:function(){
  this.age="22";
  return this;
 },
 setsex:function(){
  this.sex='girl';
  return this;
 }
}
 let p1=new Person().setname().setage().setsex();

3.函数柯里化
简单来讲就是参数合并

function curry(fn){
    //首先获取函数除fn之外的剩下的参数
    let args=Array.prototype.slice(arguments,1);
    return function(){
    let innerArgs=Array.prototype.slice.call(arguments);
    let finalArgs=args.concat(innerArgs);
    return fn.apply(this,finalArgs);   
 }
}
function add(num1,num2,num3){
    return num1+num2+num3;
}
let t=curry(add,50)(1,2);
alert(t);//53

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   JavaScript 是一种极其灵活的语言,具有多种使用风格。   一般来说,编写 JavaScript 要么...
    霜天晓阅读 846评论 0赞 0
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 5,029评论 0赞 5
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,624评论 0赞 21
  • 高级函数 在 JavaScript 中使用函数的高级方法。 数据类型的安全检测 构造函数的安全作用域 惰性载入函数...
    源境阅读 495评论 0赞 0
  • 裹紧,我的乡愁 文/春儿 夜行,总有好多 如恶狼般的眼睛 刺痛某根神经 恍惚间 看到下弦月的泪水里 有故乡的...
    幸福依然春儿阅读 582评论 0赞 2

友情链接更多精彩内容