闭包 + 回调 -> 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); // 300compute.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); // 300compute.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);
