#

# 1. 什么是闭包?

内层函数 + 引用的外层函数变量 = 闭包

闭包的主要应用就是进行数据的私用化,减少全局变量

闭包的内存泄露:

image-20230213220712311

# 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. 防抖和节流

image-20230213224807631

# 4.js 函数的几种声明方式

image-20230213225234423

# 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 值。

  1. 箭头函数没有 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. 模块化

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

liuhuan 微信支付

微信支付

liuhuan 支付宝

支付宝