定义:把一个函数当作实参传递给一个函数,在另一个函数执行过程中,把传递进来的函数执行,这种机制就是回调函数
    真实场景应用:
    ajax异步请求成功做什么事
    浏览器内置的一些方法支持回调函数
    插件组件封装中的钩子函数(生命周期函数)

    1. //ajax回调函数应用
    2. function queryData (callback) {
    3. $.ajax({
    4. url:'xxx.json',
    5. method:'get',
    6. async:true,
    7. success:result =>{
    8. typeof callback === 'function' ? callback(result) : null'
    9. }
    10. });
    11. };
    12. //遍历(迭代)方法
    13. arr.foreach((item,index)=>{});
    14. //定时器
    15. setTimeout(()=>{},1000);
    16. //钩子函数(生命周期函数)
    17. new Drag('.box',{
    18. dragstart:function(){};
    19. dragmove:function(){};
    20. dragend:function(){};
    21. });

    重写字符串内置方法replace
    特点:1.正则在字符串中匹配几次,我们传递的回调函数就会被执行几次(前提:正则设置了global修饰符)
    2.每一次执行回调函数,都把当前正则匹配的信息(既有大正则,也有小分组的)传递给回调函数
    3.还要接受回调函数的返回值,返回的是啥内容,就是要当前字符串中正则这一部分内容替换成啥

    1. ~ function () {
    2. //=>处理字符串:把字符串中的某一项替换成另外一项
    3. function handle(str, val1, val2) {
    4. let index = str.indexOf(val1);
    5. return str.substring(0, index) + val2 + str.substring(index + val1.length);
    6. }
    7. function replace(reg, callback) {
    8. let _this = this.substring(0),
    9. isGlobal = reg.global,
    10. arr = reg.exec(this);
    11. while (arr) {
    12. //=>捕获到的结果是数组(执行回调函数,把捕获的结果传递给它);还要接收回调函数执行的返回值,用返回值替换字符串中当前正则匹配的内容;
    13. if (typeof callback === "function") {
    14. let res = callback.apply(null, arr);
    15. _this = handle(_this, arr[0], res);
    16. }
    17. arr = reg.exec(this);
    18. //=>不设置GLOBAL的情况执行一次
    19. if (!isGlobal) break;
    20. }
    21. return _this;
    22. }
    23. String.prototype.replace = replace;
    24. }();
    25. let str = "{0}年{1}月{2}日",
    26. arr = ['2019', '09', '03'];
    27. str = str.replace(/\{(\d)\}/g, function (content, group1) {
    28. return '@#' + arr[group1];
    29. });
    30. console.log(str);