面试题

闭包:闭包就是能够读取其他函数内部变量的函数,使用闭包主要是为了设计私有的方法和变量,闭包的有点是防止全局变量的污染,缺点是闭包会常驻内存,会增大内存的使用,使用不当造成内存泄露。

作用域链:作用域链的作用是保证执行环境里有权访问的变量和函数的有序,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链是不允许向下访问的。简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。

js原型和原型链:每个对象都会在其内部初始化一个属性,就是prototype(原型)当我们访问一个对象的时候如果这个对象内部不存在这个属性,那么他就会去prototype里面找找这个属性,这个prototype又会有自己的prototype,于是一直找下去,也就是我们平时所说的原型链的概念。关系:instance.constructor.prototype = instance.__proro__;js对象是通过引用来传递的,当修改原型时,与之相关的对象也会继承这一改变。

事件代理:又称为事件委托,是js中常用绑定时间的常用技巧,顾名思义,时间代理即把原本需要绑定的事件委托给父元素,让父元素担当时间监听的职务。事件代理的原理是DOM的冒泡事件。使用事件代理的好处是提高性能。

js如何时间继承:构造继承、原型继承、实例继承、拷贝继承,

function Parent(){
    this.name = 'wang';
}

function Child(){
        this.age = 28;
}
    
Child.prototype = new Parent();//继承了Parent,通过原型

var demo = new Child();
alert(demo.age);
alert(demo.name);//得到被继承的属性

谈谈this对象的理解:this总是指向函数的直接调用者,如果有new关键字,this指向new出来的那个对象,在事件中,this指向触发这个事件的对象。

事件模型:捕获阶段、目标阶段、冒泡阶段,

冒泡事件:当你使用冒泡事件时,子级先触发,父级后触发。

捕获事件:父级元素先触发,子级后触发

DOM事件流:同时支持两种事件模型,捕获事件和冒泡事件。

new操作符具体干了什么:创建一个空对象,并且this变量引用改对象,同时继承了函数的原型。属性和方法被加入到this引用的对象中。新创建的对象由this所引用,并且最后隐式返回this

Ajax原理:ajax的原理简单来说是在用户和服务器之间加了一个中间层,通过XMLHTTPRequest对象来想服务器发异步请求,然后js来操作DOM而更新页面,使用户操作与服务器响应异步化,这其中最关键的异步就是从服务器获取请求数据。

哪些操作会造成内存泄露:

1.未使用var声明的全局变量

2。闭包

3.循环引用(两个对象相互引用)

4.setTimeout的第一个参数使用字符串

5.立即回收器定期扫描对象,并计算引用了每个对象的其他对象的数量,如果对象引用量为0,或该对象的唯一引用是循环的,那么该对象的内存即可以回收

谈谈你对webpack的看法:webpack是一个模块打包工具,你可以使用webpack管理你的依赖模块,并编译输出模块们所需的静态文件,它能很好的管理、打包web开发中所有用到的HTML、JavaScript、css以及各种静态文件(图片、字体),让开发过程更加高效,对于不同类型的资源,web有对应的加载模块。webpack打包器会分析模块间的依赖关系,最后生成了油画并且合并静态资源

用过哪些设计模式:工厂模式,构造函数模式

工厂模式:工厂模式解决了重复实例化的问题,但是有一个问题那就是无法识别,主要好处就是可以消除对象见的沟壑,使用工程方法而不是new关键字。

构造函数:使用构造函数的方法,即解决了重复实例化的问题有解决了对象识别的问题,这个就是与工厂模式的不同之处,直接将属性和方法赋值给this对象。

为什么要有同源限制:同源策略指的是:协议、域名。端口形同,同源策略是一种安全协议

js有哪些方法定义对象:

对象字面量: var obj = {};

构造函数:var obj = new Object();

Object.create(): var obj = Object.create(Object.prototype);

Promise的构造函数:构造一个Promise,最基本的用法如下:

var promise = new Promise(function(resolve,reject){
    if (...) {//success
       resolve(result) 
    }else {
       reject(Error(errMessage)) ;
    }

})    

Promise实例拥有then方法(具有then方法的对象,通常被称为thenable)。他的使用方法如下

promise.then(onFulfilled,onRejected)

 

渲染优化:禁止使用iframe、使用css3动画代替js动画、页面头部的style和script会阻塞页面、页面中空的href和src会阻塞其他资源的加载、使用innerHTML代替DOM操作,减少DOM操作次数、当需要设置的样式很多时设置className而不是直接操作style

css优化:

多个css合并,尽量减少http请求

将css文件放在页面最上面

避免使用css表达式

抽象提取公共样式,减少代码量

项目做过哪些优化:

  • 减少 HTTP 请求数
  • 减少 DNS 查询
  • 使用 CDN
  • 避免重定向
  • 图片懒加载
  • 减少 DOM 元素数量
  • 减少DOM 操作
  • 使用外部 JavaScript 和 CSS
  • 压缩 JavaScript 、 CSS 、字体、图片等
  • 优化 CSS Sprite
  • 使用 iconfont
  • 字体裁剪
  • 多域名分发划分内容到不同域名
  • 尽量减少 iframe 使用
  • 避免图片 src 为空
  • 把样式表放在link 中
  • JavaScript放在页面底部
posted on 2020-10-29 23:02  Veritas_Yang  阅读(95)  评论(0编辑  收藏  举报