(一)、get请求和 post请求的区别是什么?
get请求将参数放在url当中,post请求将参数放在请求体当中,理论上post更安全。
最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET产生一个TCP数据包;POST产生两个TCP数据包。
(二)、闭包
1、闭包是什么?闭包是指有权访问另一个函数作用域中的变量的函数。
2、形成闭包的原因?内部的函数存在外部作用域的引用就会导致闭包。
3、闭包的作用?保护函数的私有变量不受外部的干扰。形成不销毁的栈内存。 保存,把一些函数内的值保存下来。闭包可以实现方法和属性的私有化
var n = 10
function fn() {
var n = 20
function f() {
n++;
console.log(n)
}
return f
}
var x = fn()
x()//21
console.log(n);//10
这里的 i 是全局下的 i,共用一个作用域,当函数被执行的时候这时的 i=3,导致输出的结构都是3。
var data = [];
for (var i = 0; i < 3; i++) {
data[i] = function () {
console.log(i);
};
}
data[0]();
data[1]();
data[2]()
(三)、 什么是冒泡和挖洞
当一个子标签触发某一个事件(比如click)后,该事件会从顶级父标签一级一级往该标签传递,这个过程叫做挖洞(捕获)
什么是JS事件冒泡? 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。 当找到该子标签之后事件会再从子标签开始一级一级往父标签传递,这个过程叫做冒泡。
(四)、call , apply 和bind的区别
call 和 apply 的共同点
它们的共同点是,都能够改变函数执行时的上下文,将一个对象的方法交给另一个对象来执行,并且是立即执行的。调用 call 和 apply 的对象,必须是一个函数 Function。 bind() 方法创建一个新的函数,在调用时设置 this 关键字为提供的值。并在调用新函数时,将给定参数列表作为原函数的参数序列的前若干项。bind 方法 与 apply 和 call 比较类似,也能改变函数体内的 this 指向。不同的是,bind 方法的返回值是函数,并且需要稍后调用,才会执行。而 apply 和 call 则是立即调用。 juejin.cn/post/684490…
猫吃鱼,狗吃肉,奥特曼打小怪兽。
有天狗想吃鱼了
猫.吃鱼.call(狗,鱼)
狗就吃到鱼了
猫成精了,想打怪兽
奥特曼.打小怪兽.call(猫,小怪兽)
猫也可以打小怪兽了
(五)、 什么是原型链?
一个对象A调用方法的时候,会先从自身找有没有这个方法,如果没有就找自己的原型,看有没有该方法,没有就继续找对象A的父类B的原型,就这样一级一级往上找,称之为原型链。