闭包 + 回调 -> JS 高阶函数 High-order function

高阶函数:
比普通函数能处理更多的问题
更高的集成性(主程序+子程序)和封装性

1. 闭包(closure)

【MDN】定义:
一个函数和 对其周围状态的引用 捆绑在一起(或者函数被引用包围),这样的组合就是闭包。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。
在JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来

纯函数:

  1. 传入参数相同时,执行结果也相同
  2. 不能依赖外界,不能影响外界;(保证函数自身的安全)

1.1 闭包的作用

  1. class Compute {
  2. constructor() {
  3. this.a = 100;
  4. }
  5. add(b) {
  6. return this.a + b;
  7. }
  8. }
  9. var compute = new Compute();
  10. compute.add(200); // 300
  11. compute.a; // 100 a是public属性,ES6未提供private属性
  12. // 闭包解决
  13. (function() {
  14. var a = 100;
  15. class Compute {
  16. add(b) {
  17. return a + b;
  18. }
  19. }
  20. window.Compute = Compute;
  21. })();
  22. var compute = new Compute();
  23. compute.add(200); // 300
  24. compute.a; // undefined a是public属性,ES6未提供private属性
  1. function compute() {
  2. var baseNum = 1003;
  3. return {
  4. plus: function (a) {return baseNum + a},
  5. minus: function (a) {return baseNum - a},
  6. mul: function (a) {return baseNum * a},
  7. dev: function (a) {return baseNum / a},
  8. }
  9. }
  10. var comp = compute();
  11. console.log(comp.plus(10)); // 1013

2 回调 (callback)

CALL -> FUNCTION
TRIGGER -> EVENT

event and function :
event 通过一个程序或者是交互被触发 -> 执行相应的处理程序 function

  1. function a() {
  2. // do task 1
  3. // ...
  4. function b() {
  5. // go on doing task 1
  6. // ...
  7. // task 1 is finished
  8. }
  9. b();
  10. }
  11. a();
  12. // 回调函数写法
  13. function a(cb) {
  14. // do task 1
  15. // ...
  16. var res = 12;
  17. cb && cb(res);
  18. }
  19. function b(res){
  20. // get res
  21. // go on doing task 1
  22. }
  23. a(b);