前端面试(js篇)

1、http协议未规定GET和POST的长度限制,GET的最大长度是因为浏览器和服务器限制了URL的长度。

2、get请求类似于查找过程,用户获取数据,可以不用每次与数据库连接,可以使用缓存。

而post请求一般做的修改和删除工作,必须与数据库交互,不能使用缓存。

3、闭包,就是有权访问另一个函数作用域中的变量的函数。函数局部变量的集合,他们是匿名自执行函数

4、类的创建与继承

es5中  

用this

function User(){
    this.name="Sarah";
    this.age="23";
    this.getInfo=function(){
        return this.name + " " + this.age;
    }
}
//使用类
var user=new User();
alert(user.getInfo());

或者用prototype

function User(name){
    this.name=name||"sarah";
    this.age="23";
}
User.prototype={
        getInfo: function(){
            return this.name+" "+this.age;
        }
} 
var  user = new User();
alert(user.getInfo());//访问方法

或者Object.create()

User={
        name:'hello',
        age:'23',
        getInfo:function(){
            return this.name + " " + this.age;
        }
}

//使用
var user=Object.create(User);
alert(user.getInfo());

es6引入语法糖

class User{
    constructor(name, age){
        this.name="sarah";
        this.age ="23";
    }
    getInfo(){
        return this.name+' '+this.age;
    }
}

var user = new User();
console.log((user.getInfo()));//Sarah 23

class的继承

子类中没有constructor时

直接class zhouzhou extend Person{

}

子类中有constructor时

class zhouzhou extend Person{

  constructor(a,b,c){

super(a,b,c) 

}

}

5、解决异步回调

promise,generator,async/await

6、事件流

事件捕获阶段,处于目标阶段,事件冒泡阶段

7、实现先冒泡后捕获,分别监听捕获和冒泡,监听到捕获事件先先暂缓执行,直到冒泡事件被发生后,再执行捕获事件。

8、事件委托,就是在父元素上进行监听

9、改变函数内部this指针的指向函数(bind,apply,call的区别)

apply,call改变函数的this指向,第一个函数都是一样要改变指向的那个对象,第二个参数apply是数组,call是arg1,arg2的形式。而bind是返回一个新的函数。

10、clientHeight表示可视区域的高度,不含border,和滚动条

offsetHeight表示可视区域的高度,含border,和滚动条

scrollHeight:表示所有区域的高度,包含滚动条隐藏的部分。

clientTop:返回上边框的大小

scrollTop:滚动后被隐藏的高度

clientX,clientY标识的是鼠标的坐标

offsetX,offsetY相对于带有定位的父盒子的x,y坐标

11、垃圾回收的方法:标记清除、计数引用。

12、前端模块化,分成独立的模块,有利于重复使用和维护。

13、Commonjs:开始于服务器端的模块化,同步定义的模块,输出,module.exports,引入用require()

AMD异步模块的引入,requireJS定义了一个函数define进行定义模块,require进行引入

14、js判断类型:typeof(),instanceof()

15、数组中常用的方法。

Array.map()将数组中的每个元素调用一个函数,并返回新的数组,原数组不变

Array.forEach()也是调用函数,改变原数组

Array.filter()对所有元素进行判断,将满足条件的元素作为一个新的数组返回。

Array.push()在数组最后添加一个元素

Array.pop()删除数组的最后一个元素。

Array.shift()删除第一个元素

Array.unshift()将一个或多个元素添加到数组的开头

Array.splice()实现增加或删除数组,

Array.sort()函数,排序默认是ACSII码顺序进行比较,比较数字可传入一个函数,

a>b return 1; a<b return -1;从大到小排序。

16、去除字符串首尾空格   /(^\s*)|(\s*$)/g

17、性能优化

用cdn,减少http请求,添加本地缓存,压缩资源文件,把css放在顶部,js放在底部,避免重定向。

18、直接运行在浏览器上,不用预编译,弱类型语言,较为灵活,跨平台语言。

19、instanceof  Array判断,返回true。说明是数组。

使用Object.prototype.toString.call判断,如果值是[object Array],说明是数组

20、跨域问题,JASONP方式,CORS:方式,服务端设置一下即可。

21、数组去重

直接new Set(arr)

indexof方法,

22、常用的es6

let声明只在代码块内有效

const常量,不变

模板字符串

解构赋值,在数组或对象中提取值,对变量进行赋值

rest参数(...)获取多余的变量

()=>{}

23、concat()连接数组,slice (start,end)返回选定的数组

获得对象上的属性,for(let i in obj)

obi.keys返回属性名称的数组。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值