#
# 1. 什么是闭包?
内层函数 + 引用的外层函数变量 = 闭包
闭包的主要应用就是进行数据的私用化,减少全局变量
闭包的内存泄露:
# 2. 宏任务和微任务?
宏任务:setTimeout,setInterval,Ajax,DOM 事件
微任务:Promise,process.nextTick
宏任务在异步任务中不需要连贯执行,微任务在异步任务中需要连贯执行
微任务的执行时机要比宏任务早!(可以先记一哈,后面会继续说这点)
Dom 事件不是异步操作,但是它依赖了 eventloop 机制,所以也归在这点里了
console.log(100) | |
setTimeout(()=>{ | |
console.log(200) | |
}) | |
Promise.resolve().then(()=>{ | |
console.log(300) | |
}) | |
console.log(400) | |
// 答案为: 100 400 300 200 |
# 3. 防抖和节流
# 4.js 函数的几种声明方式
# 5. 谈谈你对原型的理解?
1、所有的引用类型(数组、函数、对象)可以自由扩展属性(除 null 以外)。
2、所有的引用类型都有一个’_ _ proto_ _' 属性 (也叫隐式原型,它是一个普通的对象)。
3、所有的函数都有一个’prototype’属性 (这也叫显式原型,它也是一个普通的对象)。
4、所有引用类型,它的’_ _ proto_ _' 属性指向它的构造函数的’prototype’属性。
5、当试图得到一个对象的属性时,如果这个对象本身不存在这个属性,那么就会去它的’_ _ proto_ _' 属性 (也就是它的构造函数的’prototype’属性) 中去寻找。
# 6. 箭头函数和普通函数的区别?
1. 箭头函数比普通函数更简洁
2. 箭头函数没有 this 指针
3. 箭头函数继承的 this 指针永远不会改变,因此 call,apply,bind 等方法不能改变箭头函数中的
this 指向
4. 箭头函数不能作为构造函数使用
由于箭头函数时没有自己的 this,且 this 指向外层的执行环境,且不能改变指向,所以不能当做构造函数使用。
5. 箭头函数没有自己的 arguments
箭头函数没有自己的 arguments 对象。在箭头函数中访问 arguments 实际上获得的是它外层函数的 arguments 值。
- 箭头函数没有 prototype
# 7. 说一说跨域是什么,如何解决跨域问题?
跨域的概念:浏览器不能执行其它的网站的脚本,这由浏览器的同源策略造成的,也是浏览器施加安全的限制
跨域解决方案: - jsonp - 前端 proxy 后端 cors - 线上 Nginx - websockt
# 8.js 类型
7 种基本数据类型
undefined
null
number
string
boolean
symbol
bigint
3 种引用数据类型
object
function
array
# 9. 数据类型的检查方式有那些
1.typeof
2.instanceof
3.constructor
4.object.prototype.toString.call()
# 10 es6 新增了那些新语法
1.let const
2. 解构赋值
3. 模板字符串
4.map set 数组新方法如 forEach find map () filter () Array.from ()
5. 箭头函数
6. 类
7.promise 和 proxy
8. 模块化