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

函数的使用

函数绑定

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)
);

相关文章:

  • docker compose -p的踩坑经验
  • cached-property - 类属性缓存装饰器
  • 再学GPIO(二)
  • Milvus(8):密集向量、二进制向量、稀疏向量
  • 【Jupyter 启动时如何指定目录】
  • 《C和C++安全编码》课程笔记——第六章 并发
  • C++23 std::move_only_function:一种仅可移动的可调用包装器 (P0288R9)
  • 常用第三方库:sqflite数据库应用
  • 深入解析MyBatis-Plus中的lambdaUpdate与lambdaQuery
  • clickhouse#复制修改数据
  • 深度解析:Web Crawling与Web Scraping的区别与联系
  • 玩转OurBMC第十八期:iKVM特性浅讲
  • Pycharm(十七)生成器
  • 案例分享(九):Hadoop分布式集群部署(三节点)
  • 基于STM32、HAL库的HX710A模数转换器ADC驱动程序设计
  • 系统架构师---基于规则的系统架构
  • 海关 瑞数 后缀分析 rs
  • java16
  • AI赋能守护行车安全新防线,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建驾驶车辆场景下驾驶员疲劳分心驾驶行为智能检测预警系统
  • 泰迪杯实战案例超深度解析:运输车辆安全驾驶行为分析与安全评价系统设计
  • 微博:严厉打击对肖某董某事件蹭炒热点、编造故事博流量等行为
  • “网约摩托”在部分县城上线:起步价五六元,专家建议纳入监管
  • 近七成科创板公司2024年营收增长,285家营收创历史新高
  • 央行就《关于规范供应链金融业务引导供应链信息服务机构更好服务中小企业融资有关事宜的通知》答问
  • 国务院安委办、应急管理部进一步调度部署“五一”假期安全防范工作
  • 解放日报:这是一场需要定力和实力的“科技长征”