1.13 学习JS

1.基本数据类型是存放在栈中,引用数据类型是存放在堆中

Let a = 1 就是在栈中存放一个值a

Let a = [1,2] 引用数据类型会在栈中存放一个地址值并在堆中存放地址值和数据,如果要用这个值会通过栈的地址值去查找堆中相同的地址值,如果不是引用数据类型则直接访问值

栈内存:引擎执行代码时工作的内存空间,除了引擎,也用来保存基本值和引用类型值的地址。

堆内存:用来保存一组无序且唯一的引用类型值,可以使用栈中的键名来取得

2.深浅拷贝:

(1)浅拷贝:如果拷贝的是一个基本数据类型,则拷贝的是基本数据类型的值,如果是引用数据类型,则拷贝的是堆中的地址值,如果其中一个对象改变值,则另一个对象也会跟着改变

浅拷贝方法:Array的slice和concat方法都是浅拷贝

(2)深拷贝:将一个对象从内存中整个拷贝出来,然后在堆开辟一个新的区域存放新对象,所以这两个对象互不影响

深拷贝方法:

JSON.stringify():把一个js对象序列化为一个JSON字符串

JSON.parse():把JSON字符串反序列化为一个js对象

3. 同步异步的区别

同步异步的区别就是在单线程上执行先后顺序的不同

同步:当前执行的API执行完才能执行下一个API,在主线程上排队执行任务,上一个任务执行完才能执行下一个任务

异步:能改变程序正常执行顺序的就是异步。当前执行的API不会堵塞后面的程序执行,进入任务队列,等待主线程上的任务执行完进入主线程执行任务

4.闭包

(1)是什么:闭包是一个嵌套的内部函数,包含被引用变量的对象,内部嵌套函数能够调用外部嵌套函数的作用域,就是闭包

(2)如何产生闭包:内部函数引用外部函数的变量时,产生闭包

(3)作用:可以访问外部的变量,使用内部函数的变量在程序执行完毕后会存在内存中,延长了局部变量的生命周期

(4)缺点:内存泄漏

5.内存泄漏:就是用过的东西没有及时的回收 导致部分内存长期被占用,程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费

(1)对于一个持续使用浏览器来说,如果一些不能用到的内存没有被及时释放,这就叫内存泄漏

(2)js的垃圾回收机制 js中的内存回收机制采用的是 引用计数:垃圾回收器会定期扫描内存,当某个内存中的值被引用为零时就会将其回收。当前变量已经使用完毕但依然被引用,导致垃圾回收器无法回收这就造成了内存泄漏

(3)识别方法:浏览器和命令行

6.for in 和 for of 区别

for in 一般用来操作对象

for in  能遍历对象内的数值,能遍历数组的索引值

for in  也能遍历手动添加上的键名和原型链上的键名

 for of 一般用来操作数组 只能遍历有部署了原生的 iterator 接口,若想遍历对象,可以用

object.keys(value)转换为数组,再进行遍历

7.this指向问题

 只有函数被调用的时候才能知道this指向谁,this指向调用者

(1)定时器中 this 指向window

(2)构造函数中 this指向实例对象

(3)箭头函数中 没有this,this指向父级作用域的this

(4)在普通函数内,this指向上一级调用者,如果没有上一级调用者,则指向window

8.箭头函数

(1)箭头函数没有自己的argument

(2)箭头函数没有自己的this,它的this指向父级作用域的this

(3)call bind apply 不能修改this的指向,this的指向是不会改变的

(4)箭头函数不能用来做构造函数 它没有this

(5)箭头函数没有自己的原型prototype

9.call bind apply的区别

(1)三者都是用来修改this指向对象的 bind返回的是一个新的函数 需要调用执行

(2)三者的传参不同 第一个参数三者都是传入一个修改的this指向对象

        第二参数中 call传入的参数直接写在后面,多个参数以逗号隔开

                           apply传入的参数用数据接收,多个参数以逗号隔开

                           bind传入的参数和call一样

9.宏任务 微任务

在异步任务下分为宏任务和微任务。

  宏任务(task):每次执行栈执行的代码就是一个宏任务    计时器 ajax 读取文件

  微任务:  在当前 task 执行结束后立即执行的任务      promise.then

  执行顺序:同步程序=>process.nextTick=>微任务=>宏任务=>setImmediate   \

10.async和await

使用async定义的函数 返回值是一个promise对象,await只能跟async一起使用,

优点在于处理then的调用链,能够使代码更加简洁清晰

缺点在于await会堵塞代码,他会等待await后的代码执行完再去执行下一行代码,即使后面跟着的是同步代码

11.promise的用法

12.get post 区别

get 请求的数据会附加在url之后多个参数用&隔开,而post请求的数据放在http请求体中

get请求会保存在浏览器记录中,而post请求不会被保存在浏览器记录中

get可以缓存数据,post不能缓存数据,get用来获取数据,post用来提交数据

get传递的数据量不能超过2kb,而post无限制

get产生一个TCP数据包,post产生两个TCP数据包

对于 GET 方式的请求,浏览器会把 header 和 data 一并发送出去,服务器响应 200(返回数据);而对于 POST,浏览器先发送 Header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值