当前位置: 首页 > 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】参数模型开发构建驾驶车辆场景下驾驶员疲劳分心驾驶行为智能检测预警系统
  • 泰迪杯实战案例超深度解析:运输车辆安全驾驶行为分析与安全评价系统设计
  • 上海明天起进入“升温通道”,五一假期冲刺33℃
  • 马上评丨发钱奖励结婚,支持婚育就该系统性发力
  • 特朗普政府称将恢复被终止的外国学生合法身份
  • 俄方证实俄总统普京正在会见美特使威特科夫
  • 调查丨当节气出现“时差”,陕西的果农们经历着什么?
  • 解放日报头版:外资汽车产业链布局上海步伐明显加快