大函数返回小函数
思想:利用闭包的机制(保存),将一些内容提前存储和处理,在某个阶段之后拿来用即可
/*
* bind预先处理内容
* @params:
* func:要执行的函数
* context:要改变的this指向
* args:要给函数传递的参数
* @return
* 返回一个代理函数
* */
const bind = function (fn,context,...args){
return function proxy(){
fn.call(context,...args)
}
}
const obj = {
x:1000
}
function fn1(y){
this.x += y
alert(this.x)
}
// dom绑定事件 - 原生bind实现
btn.onclick = fn1.bind(obj,300)
// dom绑定事件 - call实现
btn.onclick = function (){
fn1.call(obj,300)
}
// dom绑定事件 - bind预处理方式实现
btn.onclick = bind(fn1,obj,300)
// 定时器 - call处理
setTimeout(()=>{
fn1.call(obj,300)
},3000)
// 定时器 - bind预处理方式实现
setTimeout(bind(fn1,obj,300),3000)
~ function (proto){
function bind(context,...outArgs){
let _this = this
return function proxy(...innerArgs){
_this.call(context,...[...outArgs,...innerArgs])
}
}
}(Function.prototype)
原文:https://www.cnblogs.com/LunuZ/p/15158331.html