# 34、高级编程技巧

# 柯里化函数思想

TIP

是一个JS预先处理的思想,利用函数执行可以形成一个不销毁的私有作用域的原理,把需要预先处理的内容都存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函数中把之前预先存储的处理过的值进行相关的操作处理即可;

  • 如模拟原生bind方法:
Function.prototype.myBind = function (context) {
  context = context || window;
  var _this = this;
  var outArg = [].slice.call(arguments,1);
  if( 'bind' in Function.prototype ){
    return this.bind.apply(this,arguments);
  }
  return function () {
    let innerArg = [].slice.call(arguments);
    _this.apply(context,outArg.concat(innerArg));
  }
};
  • 模拟原生call方法
Function.prototype.myCall = function(context){
  context = context || window;
  //改变this指向
  context.fn = this;
  //获取除了上下文以外的参数;
  var arg = Array.from(arguments).slice(1);
  var res = context.fn(...arg);
  delete context.fn;
  return res;
}
  • 模拟原生apply方法
Function.prototype.myApply = function(context,ary){
	context = context || window;
	ary = ary || [];
	context.fn = this;
	var res = context.fn(ary);
	delete context.fn;
	return res;
}
上次更新: 5/14/2020, 7:08:06 PM