vuvivian's blog

越努力,越幸运.

  1. 1. 1.变量提升
  2. 2. 2. bind,call, apply的区别
  3. 3. 3.原型链
  4. 4. 3.script标签的defer/async

1.变量提升

在生成执行环境时,有两个阶段,一是创建阶段,js解释器会找出要提升的变量和函数,并提前在内存中给他们开辟好空间,函数的话会将整个函数存入内存中,变量只声明并且赋值为undefined,所以在第二个阶段,也就是代码执行阶段,可以直接提前使用。在提升的过程中,相同的函数会覆盖上个函数,并且函数优先于变量提升。

2. bind,call, apply的区别

· 共同点:都是用来改变this的指向
· 不同点: 除了第一个参数外,call可以接受一个参数列表, apply只接受一个参数数组,bind会返回一个函数

3.原型链

每个函数都有prototype属性,除了Function.prototype.bind()之外,该属性指向原型。 每个对象都有_proto_属性,指向了创建该对象的构造函数的原型。其实这个属性指向了[[prototype]], 但是[[prototype]]是内部属性,我们并不能访问到,所以使用_proto_来访问。 对象可以通过_proto_来寻找不属于该对象的属性,_proto_将对象连接起来组成了原型链。

3.script标签的defer/async

  • defer: 表明脚本在执行时不会影响页面的构造,也就是脚本会延迟到页面都解析完毕再执行,设置defer属性相当于是告诉浏览器立即下载,延迟执行。但是脚本会按照它们出现的先后顺序执行
  • async: 与defer类型,不同的是异步加载脚本,不会按照其顺序执行
本文最后更新于 天前,文中所描述的信息可能已发生改变