箭头函数和普通函数的区别及不适用的场景

箭头函数不绑定 arguments,可以使用 ...args 代替 箭头函数没有 prototype 属性,不能进行 new 实例化 箭头函数不能通过 call、apply 等绑定 this,因为箭头函数底层是使用bind永久绑定this了,bind绑定过的this不能修改 箭头函数的this指向创建时父级的this 箭头函数不能使用yield关键字,不能作为Generator函数 const fn1 = () => { // 箭头函数中没有arguments console.log("arguments", arguments); }; fn1(100, 300); const fn2 = () => { // 这里的this指向window,箭头函数的this指向创建时父级的this console.log("this", this); }; // 箭头函数不能修改this fn2.call({ x: 100 }); const obj = { name: "poetry", getName2() { // 这里的this指向obj return () => { // 这里的this指向obj return this.name; }; }, getName: () => { // 1、不适用箭头函数的场景1:对象方法 // 这里不能使用箭头函数,否则箭头函数指向window return this....

September 3, 2023 · 1 min · 212 words · Anna.me

一句话概括防抖和节流的区别

防抖 防抖函数原理:把触发非常频繁的事件合并成一次去执行 在指定时间内只执行一次回调函数,如果在指定的时间内又触发了该事件,则回调函数的执行时间会基于此刻重新开始计算 简易手写版: // func是用户传入需要防抖的函数 // wait是等待时间 const debounce = (func, wait) => { let timer = undefined; // 这里返回的函数是每次用户实际调用的防抖函数 // 如果已经设定过定时器了就清空上一次的定时器 // 开始一个新的定时器,延迟执行用户传入的方法 return function (...args) { if (timer) clearTimeout(timer); timer = setTimeout(() => { func.apply(this, args); }, wait); }; }; 适用场景: 文本输入的验证,连续输入文字后发送 AJAX 请求进行验证,验证一次就好 按钮提交场景:防止多次提交按钮,只执行最后提交的一次 服务端验证场景:表单验证需要服务端配合,只执行一段连续的输入事件的最后一次,还有搜索联想词功能类似 节流 节流函数原理:指频繁触发事件时,只会在指定的时间段内执行事件回调,即触发事件间隔大于等于指定的时间才会执行回调函数。总结起来就是:事件按照一段时间的间隔来进行触发。 简易手写版: 时间戳实现 const throttle = (func, wait = 50) => { let lastTime = 0; return function (...args) { let now = Date....

January 10, 2023 · 1 min · 146 words · Anna.me