web前端高级JavaScript - JS高阶编程之模块化思想/惰性函数/柯理化函数/compose组合函数

本文介绍了JavaScript中的高级编程技巧,包括模块化思想的演变,利用闭包实现模块化避免全局变量污染,以及惰性函数的概念,减少不必要的重复计算。还探讨了柯理化函数的预先处理思想,并展示了如何实现数组reduce方法的扩展。最后,文章解释了函数组合(compose)的概念,提供了一种更简洁地连接多个函数的方式。
摘要由CSDN通过智能技术生成

JS高阶编程技巧之模块化思想/惰性函数/柯理化函数/compose组合函数

利用闭包机制,实现出来的一些高阶编程方式

  • 模块化思想
  • 惰性函数
  • 柯理化函数
    • 高阶组件 - React
    • 函数的防抖和节流
    • bind
  • compose组合函数
  • 模块化思想

模块化思想演变过程:单例 -> AMD(require.js) -> CMD(sea.js) -> CommonJS(Node) -> ES6Module
为什么要引入模块化思想呢?
在传统的js编程中,往往会将很多函数和变量都写在同一个js文件中,那么如果是团队协作开发,同一个 文件可能就会由
多个人去维护。那么在这种情况下就很有可能造成全局变量的污染;比如小A写了一个queryData函数用于查询数据,过了一段时间小B也想要定义一个函数用来查询数据,于是也命名为queryData,但他并不知道其实已经有一个同名的函数了,那么这种情况下就造成了全局变量污染,某一个queryData必然会被覆盖掉。如何才能避免这种情况呢?

//传统js编程
function queryData(){
   }
//..............
function queryData(){
   }

这时模块化思想就应运而生了;比如我们可以利用闭包机制定义一个自执行函数,把每一个人的代码都用自执行函数封装起来。

//模块化
//小A
(function(){
   
	function queryData(){
   
		//........
	}
	//.......
})();

//小B
(function(){
   
	function queryData(){
   
		//........
	}
	//.......
})();

这样每个人就可以在自己的模块中使用自己定义的函数了,即使是重名函数也互不影响。但是呢,这种封装虽然避免了全局变量的污染,却同时也会引起另外一个问题:比如小B在写queryData时发现功能跟小A的queryData差不多,甚至可以拿来直接用的,但由于每个模块都是互相隔离的并不能互相访问。于是小B决定找小A讨论一下。经过一番冥思苦想,终于他们想出了一个办法,那就是将公共的函数作为全局变量window的属性开放出来

//模块化共享
//小A
(function(){
   
	function queryData(){
   
		//........
	}
	window.queryData = queryData;
	//.......
})();

//小B
(function(){
   
	window.queryData();
	//.......
})();

问题解决了两个人很开心。但是好景不长,由于功能JS越来越复杂,代码越来越多,那么需要互相开放的函数也越来越多,如果仍然用window挂载的方式显然是无法满足了,因为如果挂载多了跟传统JS编程又没什么两样了,同样也会造成变量污染。这下可难坏了两个人。在偶然的一次机会中两人得知:在JS中每个对象都是一个单独的实例,那如果把需要共享出去的方法作为对象返回出去,即避免了变量污染,同时也能共享接口,岂不是一举两得

//小A
var aMoudle = (function(){
   
	function queryData(){
   
		//........
	}
	//.......
	return{
   
		queryData: queryData,
		//......
	}
})();

//小B
var bMoudle = (function(){
   
	aMoudle.queryData();
	//.......
	return {
   
		//....
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值