浅谈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 相关文章推荐
js 单引号 传递方法
Jun 22 Javascript
使用JavaScript switch case 另类写法
Mar 14 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
Jan 10 Javascript
jquery操作angularjs对象
Jun 26 Javascript
详解js中的apply与call的用法
Jul 30 Javascript
基于js 各种排序方法和sort方法的区别(详解)
Jan 03 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
Jan 13 Javascript
layui-laydate时间日历控件使用方法详解
Nov 15 Javascript
VUE中使用MUI方法
Feb 12 Javascript
vue解决花括号数据绑定不成功的问题
Oct 30 Javascript
js实现数字滚动特效
Dec 16 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
Jul 18 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
smarty的保留变量问题
2008/10/23 PHP
php常用的url处理函数总结
2014/11/19 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
简单三步,搞掂内存泄漏
2007/03/10 Javascript
js对象数组按属性快速排序
2011/01/31 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
vue 根据选择的月份动态展示日期对应的星期几
2021/02/06 Vue.js
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
Django中的文件的上传的几种方式
2018/07/23 Python
python实现可变变量名方法详解
2019/07/01 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
超市员工管理制度
2015/08/06 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js
Mysql如何查看是否使用到索引
2022/12/24 MySQL