一.作用域链
当代码在一个环境中执行时,会创建变量对象的一个作用域链,由子级作用域返回父级作用域中,寻找变量,就叫作用域链
二.事件冒泡,它是如何工作的?如何阻止事件冒泡、默认行为
- 在一个对象上触发某类事件,这个事件会像这个对象的父级对象传播,从里到外,知道它被处理,或者它达到这个对象的最顶层
- 阻止事件冒泡。默认行为:w3c方法是:event.stopPropagation(),阻止事件过程中,阻止事件冒泡,但不会阻止默认行为 比如(跳转至超链接)
三.事件三要素
事件流描述的是从页面中接收事件的顺序,事件流包括下面几 阶段。
-
事件捕获阶段
-
处于目标阶段
-
事件冒泡阶
四.事件委托的理解
简单理解就是给父元素注册事件委托子元素执行
有以下优点:
- 减少事件注册,节省内存
- 在table上代理所有的id的click事件
- 在ul上代理所有li的click事件
- 简化了dom节点更新时,相应事件更新
- 当删除某个li时,不用移解绑上面的clikc事件
有以下缺点:
- 事件委托基于冒泡,对不冒泡的事件不支持
- 层级过多,冒泡过程中可能被某个层级阻止
五.常用的数组法
- join() 将一个数组转换成字符串
- reverse() 将数组各元素颠倒顺序
- delete() 运算符,只能删除数组元素的值,而所占的空间还在,总长度不变
- shift() 删除数组中第一个元素,返回删除的那个值,长度-1
- pop() 删除数组中最后一个元素,返回删除的那个值,长度-1
- unshift() 往数组前面添加一个或多个元素,长度改变
- push() 往数组结尾天界一个或多个数组元素,长度改变
- concat() 连接数组
- slice() 返回数组一部分
- splice() 插入,删除,替换数组的元素
- sort() 对数组元素进行排序
- toStoring() 将数组转换成一个字符串
- forEach() 遍历所有元素
六.js中的作用域
作用域分全局作用域、局部作用域、和块级作用域
- 全局作用域:最外层的函数定义的变量拥有全局作用域,即内部函数都是可以访问的
- 局部作用域:局部作用域一般只在固定的代码片段内可以访问,而外部的函数是无法访问到的
- 块级作用域:只要是代码块就可以划分为变量的作用域,这种作用域就叫会计作用域
七.说一下闭包
闭包就是一个作用域可以访问另外一个函数内部的局部变量,或者说一个函数访问另外一个父函数中的变量
八.for in 和for of 的区别
- 循环对象属性的时候推荐使用for in 变量数组的时候使用for of
- for in循环出的是key for of循环出的是value
- for of 不能循环普通的对象,需要通过object.keys()搭配使用
九.call和apply,bind的区别
共同点:
- 都是改变函数的this指向的
- 都可以利用后续参数传参
不同点:
- call和apply方法类似,区别就是call方法接受的是参数列表,apply方法接受的是一个参数数组
- bingd是创建一个心得函数,
十.new操作具体干了哪些事
- 创建一个空对象
- this会指向这个对象
- 会给这个对象赋值
- 最后返回这个对象
十一.js的垃圾回收机制
垃圾回收机制就是防止内存泄漏,所谓内存泄漏就是当不需要某个模块的时候,那个模块还存在着,垃圾回收机制就是不定期的寻找哪些没有使用过得模块,释放他们所指向的内存
十二.HTTP和HTTPS的区别
- HTTPS 协议需要申请证书,需要购买
- HTTP与HTTPS相比后者会具有比较好的安全性,
- 两者使用的连接方式不同,端口号也不同
- HTTP连接简单,是无状态的,