JS高级编程技巧1(单例设计模式)
JS高阶编程技巧:利用闭包的机制,实现出来的一些高阶编程方式模块化思想惰性函数柯理化函数高阶组件 -> React函数防抖和节流bind…compose组合函数…模块化思想单例->AMD(require.js)->CMD(sea.js)->CommonJS规范(Node)->ES6Module比如:想实现一个页面的功能,这个页面分天气板块,资讯板块没有模块化思想之前,
·
JS高阶编程技巧:利用闭包的机制,实现出来的一些高阶编程方式
- 模块化思想
- 惰性函数
- 柯理化函数
- 高阶组件 -> React
- 函数防抖和节流
- bind
- …
- compose组合函数
- …
模块化思想
单例->AMD(require.js)->CMD(sea.js)->CommonJS规范(Node)->ES6Module
比如:想实现一个页面的功能,这个页面分天气板块,资讯板块
没有模块化思想之前
- 没有模块化思想之前,团队协作开发或者代码量较多的情况,回导致全局变量污染「全局变量冲突」
// 实现天气版块
var time = '2020-11-01';
function queryData() {
// ...
}
function changeCity() {
//...
}
// 实现资讯版块
var time = '2020-10-31';
function changeCity() {
//...
}
- 如何避免变量冲突–暂时基于闭包的“保护作用”防止了全局变量的污染 「但是因为每个版块的代码都是私有的,无法相互调用」
(function () {
var time = '2020-11-01';
function queryData() {}
function changeCity() {}
})();
(function () {
var time = '2020-10-31';
function changeCity() {}
})();
- 基于某些方法去实现相互调用
(function () {
var time = '2020-11-01';
function queryData() {}
function changeCity() {}
// 把需要供别人调用的API方法,挂载到全局上「不能挂载太多,挂载多了,还是会引发全局变量的污染」
window.queryData=queryData;
})();
(function () {
var time = '2020-10-31';
function changeCity() {}
queryData();
})();
模块化思想
- 目前比较优势的做法:利用对象
- 对象的特点:每一个对象都是一个单独的堆内存空间(单独的实例->Object),这样即使多个对象中的成员名字相同,也互不影响
- 仿照其他后台语言,其实obj1/obj2不仅仅称为对象名,更被称为“命名空间「给堆内存空间起一个名字」”
- 每一个对象都是一个单独的实例,用来管理自己的私有信息,即使名字相同,也互不影响,其实这就是“JS中的单例设计模式”
var obj1 = {
name: 'hello',
age: 12,
fn: function () {}
};
var obj2 = {
name: 'world',
age: 30,
2. 高级单例设计模式:闭包+单例的结合,也是最早期的JS模块化思想
var weatherModule=(function () {
var time = '2020-11-01';
function queryData() {}
function changeCity() {}
return {
queryData:queryData,
changeCity:changeCity
};
})();
var infoModule=(function () {
var time = '2020-10-31';
function changeCity() {}
weatherModule.queryData();
return {
changeCity:changeCity
};
})();
var skinModule=(function(){
// ...
return {};
})();
更多推荐
已为社区贡献1条内容
所有评论(0)