闭包
闭包:内层函数+外层函数变量 可以访问外层函数的变量的函数
闭包的作用:可以实现数据私有,让内外层变量关联
闭包的缺点:会导致内存泄露
更改内存指向
call方法调用函数,更改函数this指向,第二个参数传递普通参数
apply方法调用函数,更改this指向,只接受数据作为第二个参数
bind方法调用函数但不执行函数,更改this指向,普通参数
变量提升或叫预解析
var声明的变量存在变量提升的问题
变量提升是指把var声明的变量提升声明,但不赋值
函数也存在变量提升,js会把函数声明提升,但不执行调用
同源跨域
同源策略:不同协议的URL地址相互请求资源时会被浏览器拦截,这是一种安全策略,任何一个标准浏览器都支持这个策略,需要注意的是,跨域请求时可以发出的,只是在客户端浏览器是会被拦截的。
跨域请求:由同源策略发出的不同URL之间请求资源的请求叫做跨域请求。
跨域请求不被拦截的方法
使用JSONP实现跨域
原理:动态创建Script标签
JSONP发送的不是Ajax请求,不需要XMLHttprequests或者ActiveX的支持,只支持get请求
使用CORS实现跨域(主流方式)
CORS是Express下的第三方中间件,需要在express下安装CORS中间件,并导入使用。
CORS发送的是真正的Ajax请求,支持Ajax的跨域,只要服务支持CORS跨域资源共享,则浏览器肯定能够正常访问这种CORS接口,支持所有类型的HTTP请求。
HTTP请求方式
GET:获取服务器资源
POST:提交服务器资源
PUT:修改服务器资源
DELETE:删除服务器资源
域名与IP、端口,url
IP是互联网设备的唯一标识,IPv4与IPv6是现在主流的ip地址形式。
域名:域名是IP的别称,为了方便记忆而指指定的域名与ip的映射关系,有专门的DNS解析帮助实现IP的转换。
端口:每台计算机都有65536个端口,每个端口代表一个服务的入口
URL:统一资源定位符,标识internet上的资源地址。通常由协议、域名或ip或主机地址、端口号、资源路径组成。
构造函数与类的区别
类中的成员和方法都是定义在类中,类创建对象后,这些对象的方法都是引用同一个方法,这样可以节省存储空间。
构造函数在创建对象后,却不是引用同一个方法,应用同一方法需要在构造函数的原型对象上定义方法,才可以被共享。
原型链
构造函数有一个prototype的属性指向它的原型对象,构造函数通过实例化得到实例对象,实例对象有一个__proto__属性指向构造函数的原型对象,构造函数的原型对象有一个constructor属性指回构造函数,实例对象也有一个constructor属性指回构造函数,构造函数的原型对象也有一个__proto__属性指向Object的原型对象,Object的原型对象也有__proto__属性指向NUll,Object的原型对象有一个consructor属性指向Object构造函数。
应用:成员查找机制利用原型链的关系查找