当前位置: 首页 > ai >正文

函数的使用

函数绑定

fn.call(obj, param1, param2)
fn.apply(obj, [param1, param2])
fn.bind(obj, param1, param2)()相同点:
都是借用别人(fn)的方法,替换其中的this(第一个参数)call和apply的不同点:apply以数组形式传参、call以多个参数形式传参
call和apply的相同点:都是立即执行,不用再次调用call、apply和bind的不同点:bind返回一个函数,还需要再调用一下

回调函数

let getMsg = (msg, format) => {if(msg){return format(msg)}
}let ss = getMsg('我们是中国人', (msg) => {return msg.slice(0, 2)
})
console.log(ss)    //我们定义外部函数getMsg时,回调函数作为参数传递,并在函数体里调用
调用外部函数时,定义回调函数 msg => {return msg.slice(0, 2)}

箭头函数

// 如果简写的箭头函数return的是一个对象,这个对象要用括号括起来(语法上的要求)
x => ({key: x})

高阶函数应用

  • AOP切片编程
// 我们不希望如下,在原有的goschool中加吃饭功能
function goschool(){console.log("吃饭");console.log("上学");
}
// 而是不修改原有功能,去添加新的功能
function eat() {console.log("吃饭");
}
function goschool() {console.log("上学");
}
Function.prototype.before = function (cb) {return () => {cb();this();};
};
const someFn = goschool.before(eat);
someFn();//吃饭,上学
  • 函数参数复用
function getTargetStr(region, repoffice) {return '大屏' + region + repoffice
}
console.log(getTargetStr('中国', '深圳'))
console.log(getTargetStr('中国', '上海'))// 第一个参数都是中国,那么这个参数是可以复用的,如下
function getTargetStr(region) {return function(repoffice){return '大屏' + region + repoffice}
}
const chinaRegion = getTargetStr('中国')
console.log(chinaRegion('深圳'))
console.log(chinaRegion('上海'))
  • 将嵌套执行的函数平铺
function multiply(x) {return x * 5;
}
function add(x) {return x + 3;
}
// 嵌套执行就是一个函数的返回值作为另一个函数的参数
const value = multiply(add(2));// 管道函数实现
function pipe(...fns) {return function (data) {return fns.reduce((acc, itemFn) => {return itemFn(acc);}, data);};
}
const value = pipe(add, multiply)(2);
  • 防抖
function debounce(fn, delay) {let timer = null;return function (...args) {const firstClick = !timer;// 防抖if (timer) {clearTimeout(timer);}// 第一次立即执行操作if (firstClick) {// debounce函数renturn出来的函数为任务函数// 其this指向被绑定的dom,同时帮任务函数的参数传进来fn.apply(this, args);}timer = setTimeout(() => {// 在delay时间到了之后timer变为null,之前不为nulltimer = null;}, delay);};
}
function handler(e) {console.log(this);// 元素console.log(e);//事件对象
}
const dom = document.getElementById("box");
dom.addEventListener("click", debounce(handler, 2000));
  • 节流
function throttle(fn, delay) {let begin = 0;return function (...args) {let cur = new Date().getTime();if (cur - begin > delay) {fn.apply(this, args);begin = cur;}};
}
dom.addEventListener("click",throttle(function (e) {console.log("this", this); // 元素console.log("e", e); //事件对象}, 2000)
);
http://www.xdnf.cn/news/2477.html

相关文章:

  • 诗词软件开发实战:从零开始构建现代诗歌应用
  • 北极花深度融合DeepSeek大模型,全面助力生物多样性智能分析图片生物多样性智能分析
  • Spring的Bean和自动配置
  • linux两个特殊的宏 _RET_IP_ 和_THIS_IP_ 实现
  • GPUStack昇腾Atlas300I duo部署模型DeepSeek-R1【GPUStack实战篇2】
  • 单片机-89C51部分:5、点亮LED
  • 纳米级形貌快速测量,白光干涉仪助力摩擦磨损学科发展
  • Vue Router ——路由基础详解(一)
  • Qt中的全局函数讲解集合(全)
  • 软件模块依赖关系管理与优化
  • 基于 STM32 与 RFID 技术的医院医疗器械数字化精细管理系统设计
  • Redis内存管理三部曲:淘汰、过期与惰性删除的协同哲学
  • 01_Long比较值 类型相同值不同
  • 幂等性处理解决方案实战示例
  • MySQL 表的约束(一)
  • 第一个 servlet请求
  • 【看穿操控的套路】
  • 【记录maven依赖规则-dependencyManagement,dependencies】
  • Matlab 报错:尝试将 SCRIPT vl_sift 作为函数执行:
  • Java学习手册:Spring 框架核心概念
  • 如何通过OKR管理项目目标
  • 四 YARN配置和HBase配置
  • C++ 区分关键字和标识符
  • 职场提效小工具!
  • 【halcon】tuple_sort_index 和 select_obj 配合使用 详解
  • 小白学习python第四天
  • SpringBoot常用注解解析汇总
  • 基础学习:(9)vit -- vision transformer 和其变体调研
  • 03 基于 STM32 的温度控制系统
  • vscode eslint与vue-official冲突,导致点击的时候鼠标不会变成手型,一直在加载,但是不转到相应方法。