js面试题

1.节流和防抖

  节流:高频触发事件,在n秒内只执行一次

 1 function throttle (fn, delay) {
 2   let canRun = ture
 3   return function () {
 4     if (!canRun) return 
 5     canRun = false
 6     setTimeOut(()=> {
 7         fn.apply(this, arguments)
 8         canRun = true
 9     }, delay)
10   }              
11 }

  防抖:触发时间后n秒只执行一次,如果n秒内再次触发,则会重新计算时间

function debounce (fn, delay) {
    let timer = null
    return function () {
        if (timer) clearTimeout(timer)
        timer = setTimeOut(() => {
            fn.apply(this, arguments)
        }, delay)
    }
}

2.get和post

http协议从未规定GET/POST的请求长度是多少。对GET请求参数的限制是来源浏览器或WEB服务器,浏览器或者web服务器限制了url长度

IE最大长度是2083Byte,谷歌的话是8182byte

get和post在缓存方面的区别

  • get请求类似查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存
  • post一般是修改和删除工作,所以必须和数据库交互,所以不能使用缓存

3.模块化发展

  IIFE:使用自执行函数来编写模块化;在一个单独的函数作用域中执行代码,避免变量冲突

(function(){
  return {
    data:[]
  }
})()

  AMD:使用require.js来编写模块化;依赖必须提前声明好

define('./index.js',function(code){
    // code 就是index.js 返回的内容
})

  CMD:使用seaJS来编写模块化;支持动态引入依赖文件

define(function(require, exports, module) {  
  var indexCode = require('./index.js');
})

  CommonJS:nodejs自带的模块化

var fs = require('fs');

  ES Module:es6引入的模块化,支持import来引入另一个js

import a from 'a';

4.ES5的继承和ES6的继承有什么区别?

  es5的继承是通过prototype或构造函数机制来实现。es5的继承实质上是先创建子类的实例对象,然后将父类的方法添加到this上

  es6实质上是先创建父类的实例对象this,(所以必须先调用父类的super()方法),然后在用子类的构造函数修改this

具体的:es6通过class定义类,里面有构造方法,类之间通过extends关键字实现继承。子类必须在constructor方法中调用super()方法,否则新实例报错。因为子类没有自己的this对象,而是继承了父类的this对象,然后对其加工。如果不调用super方法,子类得不到this对象

  

原文地址:https://www.cnblogs.com/dropInInt/p/15095640.html