javacript语法易忘知识:
1.实现防抖函数debounce:
防抖函数原理 :
在事件被触发n秒后在执行回调,如果在这n秒内又被触发,则重新计时。
场景:
按钮提交场景: 防止多次提交按钮,只执行最后提交的一次
服务端验证场景 : 表单验证需要服务端配合,只执行一段连续的输入事件的最后一次,还有搜索联想词功能和一些表单元素的校验,如手机号,邮箱,用户名等类似
//防抖函数
const debounce = (fn,delay)=>{
let timer = null;
return (...args)=>{
clearTimeout(timer);
timer = setTimeout(()=>{
fn.apply(this,args)
},delay);
};
};
2.实现节流函数 (throttle):
防抖函数原理:
规定在一单位时间内。只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
适用场景:
拖拽场景: 固定时间内只执行一次,防止超高频次触发位置变动
缩放场景: 监控浏览器resize
动画场景: 避免短时间内多次触发动画引起性能问题
//节流函数
const throttle = (fn,delay = 500) =>{
let flag = true;
return (...args) =>{
if (!flag) return;
flag = false;
setTimeout(() => {
fn.apply(this,args)
},delay);
};
};
实现一个call:
将函数设为对象的属性
执行&删除这个函数
指定this到函数并传人给定参数执行函数
如果不传人参数,默认指向为 window
//实现一个call方法;
Function.prototype.myCall = function(context){
//此处没有考虑context非object情况
context.fn = this;
let args = [];
for (let i = 1,len = arguments.length,i < len; i++){
args.push(arguments[i]);
}
context.fn(...args);
let result = context.fn(...args);
delete context.fn;
return result;
};
3.模拟Object.create
原理:Object.create() 方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__
// 模拟 object.create
function create(proto){
function F(){
F.prototype = proto;
return new F();
}
}
4.转化为驼峰命名
var f = function(s){
return s.replace(/-\w/g,function(x){
return x.slice(1).toUpperCase();
})
}