前端面试常见手写题目

1.实现防抖

function debounce(fn,delay = 200){
     
  if(typeof fn !== 'function'){
     
    throw new TypeError('fn is not a function')
  }
  let lastFn = null;
  return function(...args){
     
    if(lastFn) clearTimeout(lastFn)
    lastFn = setTimeout(()=>{
     
      fn.call(this,...args)
    },delay)
  }
}

function clickHandle(){
     
  console.log('test')
}

window.onscroll = debounce(clickHandle,500)

2.实现接节流

function throttle(fn,delay = 200){
     
  if(typeof fn !== 'function'){
     
    throw new TypeError('fn is not a function')
  }
  let flag = null;
  return function(...args){
     
    if(!flag){
     
      setTimeout(()=>{
     
        flag = true
        fn.call(this,...args)
      },delay)
    }
  }
}
function clickHandle(){
     
  console.log('test')
}

window.onscroll = debounce(clickHandle,500)

3.实现bind

Function.prototype.bind = function(obj,arg){
     
  let arg = Array.prototype.slice.call(arguments,1)
  let _this = this
  let obj = function(newArg){
     
    arg = arg.concat( Array.prototype.slice.call(newArg))
    return content.apply(obj,arg)
  }
  obj.prototype = Object.create(_this.prototype)
  return obj
}

4.new内部原理(new Parent())

function myNew(){
     
  let obj = {
     }
  obj.__proto__ = Parent.prototype
  Parent.call(obj)
  return obj
}

5.函数柯里化

  • 这里运行出来是一个Function,所以没有达到实际的效果
function add(){
     
  let args = Array.from(arguments)
  let _adder = function(){
     
    args.push(...arguments)
    return _adder
  }

  _adder.toString = function(){
     
     return _args.reduce(function (a, b) {
     
            return a + b;
        });
  }
  return _adder
}
console.log(add(1,2)(2))

你可能感兴趣的:(javascript,es6,javascript,程序设计)