[Web前端面试]-----葵花宝典 JS篇

一.作用域链

当代码在一个环境中执行时,会创建变量对象的一个作用域链,由子级作用域返回父级作用域中,寻找变量,就叫作用域链

二.事件冒泡,它是如何工作的?如何阻止事件冒泡、默认行为

    在一个对象上触发某类事件,这个事件会像这个对象的父级对象传播,从里到外,知道它被处理,或者它达到这个对象的最顶层 阻止事件冒泡。默认行为:w3c方法是:event.stopPropagation(),阻止事件过程中,阻止事件冒泡,但不会阻止默认行为 比如(跳转至超链接)

三.事件三要素

事件流描述的是从页面中接收事件的顺序,事件流包括下面几 阶段。

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

四.事件委托的理解

简单理解就是给父元素注册事件委托子元素执行

有以下优点:

    减少事件注册,节省内存 在table上代理所有的id的click事件 在ul上代理所有li的click事件 简化了dom节点更新时,相应事件更新 当删除某个li时,不用移解绑上面的clikc事件

有以下缺点:

    事件委托基于冒泡,对不冒泡的事件不支持 层级过多,冒泡过程中可能被某个层级阻止

五.常用的数组法

  1. join() 将一个数组转换成字符串
  2. reverse() 将数组各元素颠倒顺序
  3. delete() 运算符,只能删除数组元素的值,而所占的空间还在,总长度不变
  4. shift() 删除数组中第一个元素,返回删除的那个值,长度-1
  5. pop() 删除数组中最后一个元素,返回删除的那个值,长度-1
  6. unshift() 往数组前面添加一个或多个元素,长度改变
  7. push() 往数组结尾天界一个或多个数组元素,长度改变
  8. concat() 连接数组
  9. slice() 返回数组一部分
  10. splice() 插入,删除,替换数组的元素
  11. sort() 对数组元素进行排序
  12. toStoring() 将数组转换成一个字符串
  13. forEach() 遍历所有元素

六.js中的作用域

作用域分全局作用域、局部作用域、和块级作用域

    全局作用域:最外层的函数定义的变量拥有全局作用域,即内部函数都是可以访问的 局部作用域:局部作用域一般只在固定的代码片段内可以访问,而外部的函数是无法访问到的 块级作用域:只要是代码块就可以划分为变量的作用域,这种作用域就叫会计作用域

七.说一下闭包

闭包就是一个作用域可以访问另外一个函数内部的局部变量,或者说一个函数访问另外一个父函数中的变量

八.for in 和for of 的区别

  1. 循环对象属性的时候推荐使用for in 变量数组的时候使用for of
  2. for in循环出的是key for of循环出的是value
  3. for of 不能循环普通的对象,需要通过object.keys()搭配使用

九.call和apply,bind的区别

共同点:

  1. 都是改变函数的this指向的
  2. 都可以利用后续参数传参

不同点:

  1. call和apply方法类似,区别就是call方法接受的是参数列表,apply方法接受的是一个参数数组
  2. bingd是创建一个心得函数,


十.new操作具体干了哪些事

  1. 创建一个空对象
  2. this会指向这个对象
  3. 会给这个对象赋值
  4. 最后返回这个对象

十一.js的垃圾回收机制

垃圾回收机制就是防止内存泄漏,所谓内存泄漏就是当不需要某个模块的时候,那个模块还存在着,垃圾回收机制就是不定期的寻找哪些没有使用过得模块,释放他们所指向的内存

十二.HTTP和HTTPS的区别

  1. HTTPS 协议需要申请证书,需要购买
  2. HTTP与HTTPS相比后者会具有比较好的安全性,
  3. 两者使用的连接方式不同,端口号也不同
  4. HTTP连接简单,是无状态的,
经验分享 程序员 微信小程序 职场和发展