浅谈javascript函数式编程


Posted in Javascript onSeptember 06, 2015

函数式编程,属于编程范式的一种

1 函数是第一公民,可以返回值,也可以作为其他函数的参数

//console是一个函数
function con(v){
 console.log(v)
}
// execute 也是一个函数
function execute(fn){
 fn(1)
}
//将con函数作为参数传进execute函数
execute(con) // 1

2 接近自然语言的写法

  晓池吃完饭然后就去洗澡 可以表现为eat().bathe()

// 吃饭函数
function eat(eat){
 this.e = eat;
 return this;
}
// 洗澡函数
function bathe(bathe){
 this.b = bathe;
 return this;
}

var person = eat("晓池在吃饭").bathe("晓池去洗澡了");
console.log(person.e) // 晓池在吃饭
console.log(person.b) // 晓池去洗澡了

 3 函数式编程的特性

  匿名函数,即没有名字的函数,在函数式编程中很常见,有时候我们需要通过它(不复用的函数)来完成部分功能,下面我们通过定义一个each函数来了解一下:

// 自定义each函数
function each(arr,func){
 var length = arr.length;
 for(var i = 0 ;i <length; i++){
  func(i,arr[i])
 }
}
// 执行each函数,传进一个匿名函数作为该函数的参数
each([1,2,3],function(i,v){
 console.log('key:' + i + ',value:' +v);
});
//输出内容
//key:0,value:1
//key:1,value:2
//key:2,value:3

 柯里化:柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

//定义add函数,并返回一个函数
function add(num){
 return function(x){
   return num + x;
 }
}
add1 = add(1)
console.log(add1(3)) // 4

高阶函数:有函数作为参数或函数内部返回一个函数,都可称该函数为高阶函数 ,以上的each函数即算是高阶函数的一种。

结束语

实际的应用中,不会囿于函数式或者面向对象,通常是两者混合使用,事实上,很多主流的面向对象语言都在不断的完善自己,比如加入一些函数式编程语言的特征等,JavaScript 中,这两者得到了良好的结合,代码不但可以非常简单,优美,而且更易于调试。

Javascript 相关文章推荐
JavaScript插入动态样式实现代码
Feb 22 Javascript
javascript间隔刷新的简单实例
Nov 14 Javascript
浅谈javascript的分号的使用
May 12 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
Jan 04 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
Apr 17 Javascript
基于WebUploader的文件上传js插件
Aug 19 Javascript
更靠谱的H5横竖屏检测方法(js代码)
Sep 13 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
Oct 14 Javascript
jquery Ajax实现Select动态添加数据
Jun 08 jQuery
JavaScript使用ul中li标签实现删除效果
Apr 15 Javascript
关于layui表单中按钮自动提交的解决方法
Sep 09 Javascript
封装 axios+promise通用请求函数操作
Aug 11 Javascript
JS简单实现多级Select联动菜单效果代码
Sep 06 #Javascript
Javascript实现快速排序(Quicksort)的算法详解
Sep 06 #Javascript
简单谈谈javascript Date类型
Sep 06 #Javascript
Js制作点击输入框时默认文字消失的效果
Sep 05 #Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
Sep 05 #Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 #Javascript
javascript日期操作详解(脚本之家整理)
Sep 05 #Javascript
You might like
php中动态调用函数的方法
2015/03/16 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
Python with的用法
2014/08/22 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
Python Cookie 读取和保存方法
2018/12/28 Python
python命令行工具Click快速掌握
2019/07/04 Python
python变量的存储原理详解
2019/07/10 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
eBay奥地利站:eBay.at
2019/07/24 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
什么时候需要进行强制类型转换
2016/09/03 面试题
《从现在开始》教学反思
2014/04/15 职场文书
医院科室评语
2015/01/04 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
python执行js代码的方法
2021/05/13 Python
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS