1.级联函数:应用对象方法调用的连写

function A(){
this.a = '';
this.b = '';
this.c = '';
} //改造一下
A.prototype = { A.prototype = {
setA : function(){ setA : function(){
this.a = 'A'; this.a = 'A';
}, return this;
setB : function(){ },
this.b = 'B'; setB : function(){
}, this.b = 'B';
setC : function(){ return this;
this.c = 'c'; },
} setC : function(){
} this.c = 'c';
var x = new A(); return this;
x.setA(); }
x.setB(); }
x.setC(); x.setA().setB().setC();

2.惰性载入:性能优化

   我们先看个案例

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

每次调用addEvent函数的时候,它都要对浏览器事件机制进行检查,从第一个 if 开始判断,无端地浪费了内存,javasript提出了 惰性载入函数思想,第一次判断出浏览器能力,之后就不再判断了,好啦,脱衣解裤,我们开始吧......

方式一:函数重写方式

/**
* 分析:
* 在这个惰性载入的addEvent()中,if语句的每个分支都会为addEvent变量赋值,有效覆盖了原函数。
* 最后一步便是调用了新赋函数。下一次调用addEvent()的时候,
* 便会直接调用新赋值的函数,这样就不用再执行if语句了
*/
function addEvent(type, element, func){
if(element.addEventListener){
//惰性载入重写addEvent()
addEvent = function(type, element, func){
element.addEventListener(type, func, false);
};
}else if(element.attachEvent){
addEvent = function(type, element, func){
element.attachEvent('on'+type, func);
}; }else{
addEvent = function(type, element, func){
element['on'+type] = func;
};
}
return addEvent(type, element, func);
}

方式二: 匿名函数立即调用方式

/**
* 分析:
* 创建一个匿名的自执行函数,通过不同的分支以确定应该使用那个函数实现,
* 每个分支都返回一个正确的函数,并立即将其赋值给变量addEvent
* 之后每次调用都是这个被赋的值
*/
var addEvent = (function(){
if(document.addEventListener){
return function(type, element, func){
element.addEventListener(type, func, false);
};
}else if(document.attachEvent){
return function(type, element, func){
element.attachEvent('on'+type, func);
};
}else{
return function(type, element, func){
element['on'+type] = func;
};
}
})();

怎么样,是不是有点小高潮,反正我是湿了......

3.函数柯里化: 这里就不讲解了,感觉没JB用,

javascript之高级函数应用思想的更多相关文章

  1. javaScript的高级函数

    1.map() map()方法返回一个新数组,新数组是原始数组调用函数之后处理后的值. map()方法按照原始数组元素顺序依次处理元素. map不会对空数组进行检测. map不会改变原始数组 . 参数 ...

  2. javascript高级函数

    高级函数 安全的类型检测 js内置的类型检测并非完全可靠,typeof操作符难以判断某个值是否为函数 instanceof在多个frame的情况下,会出现问题. 例如:var isArray = va ...

  3. 22.1 高级函数【JavaScript高级程序设计第三版】

    函数是JavaScript 中最有趣的部分之一.它们本质上是十分简单和过程化的,但也可以是非常复杂和动态的.一些额外的功能可以通过使用闭包来实现.此外,由于所有的函数都是对象,所以使用函数指针非常简单 ...

  4. 一篇文章把你带入到JavaScript中的闭包与高级函数

    在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. funct ...

  5. 前端常用的库和实用技术之JavaScript高级函数

    1.惰性载入函数 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  6. 学习javaScript必知必会(3)~数组(数组创建,for...in遍历,辅助函数,高级函数filter、map、reduce)

    一.数组: 1.js是弱语言,js中的数组定义时:不用指定数据类型.不用功指定数组长度:数组可以存储任何数据类型的数据 2.数组定义的[ ] 的实质: [] = new Array(); {} = n ...

  7. JavaScript高阶函数 map reduce filter sort

    本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 高阶函数            一个函数就接收另一个函数作为参数,这种函数就称之为高阶函数          1.高阶函数之map:   ...

  8. JavaScript 立即执行函数

    js中(function(){…})()立即执行函数写法理解 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法 ...

  9. Javascript学习之函数(function)

    在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...

随机推荐

  1. IIS 允许无后缀文件访问的配置

    最近一个项目 前端开发用了一大堆无后缀的html模板,问题就是发布到IIS以后访问 模板文件报404错误.无法下载. 百度 谷歌 搜一堆 都是MIME里添加 '.*' 实际上无效 正解是: MIME里 ...

  2. jQuery之父:每天都写点代码

    去年秋天,我的“兼职编程项目”遇到了一些问题:要不是从 Khan Academy 的项目里挪出时间来的话,我根本没办法将不理想的进度弥补上. 这些项目遇到了一些严重的问题.之前的工作我主要是在周末,有 ...

  3. css笔记06:层叠样式选择器

    1. (1)HTML文件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  4. NSURLConnection、NSURLSession

    NSURLConnection   1.准备网络资源地址:URL 注意:由于URL支持26个英文字母,数字和少数的几个特殊字符. 因此对于URL中包含非标准URL的字符,需要进行编码. iOS提供了函 ...

  5. Android之ListView常用技巧

    ListView是一个非常常用的列表控件,虽然在5.x时代ListView的风头正在逐渐的被RecyclerView抢去,但是ListView的使用范围依然十分广泛. 接下来的ListView的常用技 ...

  6. thymleaf分支用法

    <div th:switch="${user.role}"> <p th:case="'admin'">User is an admin ...

  7. customerized convert from field type to DB field's type

    @LastModifiedDate @Convert(converter = LocalDateTime2TimestampConverter.class) @Slf4j public class L ...

  8. python(3)-lambda表达式

    >>> fun = lambda a: a+1 >>> fun(1) 2 >>> fun = lambda a,b: a+b >>&g ...

  9. activity工作的使用

    一. 什么是工作流 以请假为例,现在大多数公司的请假流程是这样的 员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑 采用工作 ...

  10. poj 1848 树形dp

    思路:表示我很弱,这个想不出dp方程,参考网上代码 #include<iostream> #include<algorithm> #include<cstring> ...