- 什么是闭包?闭包的用途是什么?闭包的缺点是什么?
• 闭包:如果一个函数用到了外部的变量,那么这个函数加这个变量就叫做闭包。上边的a和f2组成了闭包
function f1(){
let a = 10
function f2(){
let a = 2
console.log(a)
}
f2()
}
f1() // 2
• 作用
①可以访问外部的变量
②将创建的变量始终保存在内存中,不会在被调用后自动清除。
• 好处
①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突
②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)
③匿名执行函数可以减少内存消耗
• 坏处
①其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null;
②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响
- call、apply、bind 的用法分别是什么?
call :语法function.call(thisArg, arg1, arg2, ...)
call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。这个this可以是上下文对象,也可以指定别的(另一个对象)。
示例:
call.png
apply: apply的作用和call一样,只是在调用的时候,传参数的方式不同 区别是apply接受的是一个包含多个参数的数组,call接受的是一个参数列表。
例:
apply.png
bind:bind接受的参数跟call一致,只是bind不会立即调用,它会生成一个新的函数,您想什么时候调用就什么时候调用。以图为例,在调用SamCharge的时候,Tom.Charge也会调用,具体为Tom.Charge.call(Sam,level1,level2)
例:
bind.png - HTTP 状态码
100——这个状态码是告诉客户端应该继续发送请求,这个临时响应是用来通知客户端的,部分的请求服务器已经接受,但是客户端应继续发送求请求的剩余部分,如果请求已经完成,就忽略这个响应,而且服务器会在请求完成后向客户发送一个最终的结果
200——OK:表示从客户端发送给服务器的请求被正常处理并返回。
206——Patial Content:表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
301——Moved Permanentl:永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
400——Bad Request:表示请求报文中存在语法错误。
401——Unauthorized:未经许可,需要通过HTTP认证。
403——Forbidden:服务器拒绝该次访问(访问权限出现问题)
404——Not Found:表示服务器上无法找到请求的资源,除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用。
409——Conflict:服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
500——Internal Server Error:服务器内部错误,无法完成请求