闭包 + 回调 -> JS 高阶函数 High-order function
高阶函数:
比普通函数能处理更多的问题
更高的集成性(主程序+子程序)和封装性
1. 闭包(closure)
【MDN】定义:
一个函数和 对其周围状态的引用 捆绑在一起(或者函数被引用包围),这样的组合就是闭包。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。
在JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来
纯函数:
- 传入参数相同时,执行结果也相同
- 不能依赖外界,不能影响外界;(保证函数自身的安全)
1.1 闭包的作用
class Compute {
constructor() {
this.a = 100;
}
add(b) {
return this.a + b;
}
}
var compute = new Compute();
compute.add(200); // 300
compute.a; // 100 a是public属性,ES6未提供private属性
// 闭包解决
(function() {
var a = 100;
class Compute {
add(b) {
return a + b;
}
}
window.Compute = Compute;
})();
var compute = new Compute();
compute.add(200); // 300
compute.a; // undefined a是public属性,ES6未提供private属性
function compute() {
var baseNum = 1003;
return {
plus: function (a) {return baseNum + a},
minus: function (a) {return baseNum - a},
mul: function (a) {return baseNum * a},
dev: function (a) {return baseNum / a},
}
}
var comp = compute();
console.log(comp.plus(10)); // 1013
2 回调 (callback)
CALL -> FUNCTION
TRIGGER -> EVENT
event and function :
event 通过一个程序或者是交互被触发 -> 执行相应的处理程序 function
function a() {
// do task 1
// ...
function b() {
// go on doing task 1
// ...
// task 1 is finished
}
b();
}
a();
// 回调函数写法
function a(cb) {
// do task 1
// ...
var res = 12;
cb && cb(res);
}
function b(res){
// get res
// go on doing task 1
}
a(b);