```
当查找一个对象的某个属性时,会先从它自身的属性上查找,
如果找不到的话会从它的_proto_属性上查找,就是这个构造函数的prototype属性,
如果还没找到就会继续在_proto_上查找,直到最顶层,找不到则为undefined,
像这样一层一层去查找形成一个链式的称为原型链
```
new一个函数,中间发生了什么
1开辟一个内存空间,也就是创建一个空对象,obj={}或obj=new Object()
2将这个新对象的_proto_属性指向它构造函数的prototype
3将构造函数this绑定为这个新对象,在空对象上挂在属性和方法(call或apply方式)
4返回这个新对象
相同:都是改变函数上下文this指向
不同:bind返回的是一个函数,不会立即执行
传参的不同 apply第二个参数为数组形式
call apply都是对函数的直接调用
1作为普通函数直接调用,this指向window
2作为对象方法去调用的话,this指向调用它的这个对象
3箭头函数,没有this,this取决于外层离它最近的非箭头函数的this
4构造函数的this,指向创建这个构造函数的实例对象
1词法作用域(静态作用域)
js采用的就是词法作用域
只有函数可以限定作用域
函数允许函数访问外层作用域的变量
函数在定义的时候决定了函数作用域,词法作用域关心函数在何处被定义
2动态作用域
函数在调用的时候决定了函数作用域,动态作用域关心函数在何处被调用
变量取值会到创建这个变量的函数作用域中去查找,如果找不到会向上查找,直到查找到全局作用域,这就形成了一个作用域链
1节流
2防抖
1原型链继承
2构造函数继承
3组合继承(原型链继承+构造函数继承)
4原型式继承
5寄生继承
6组合寄生继承
定义在一个函数内部的函数,这个内部函数有权访问外部函数作用域的变量
优点:
缺点:
js在运行中的任务,有一套收集,排队,执行的特殊机制,这种机制就是事件循环
遇到同步事件直接执行,遇到异步事件分为宏任务和微任务
如果微任务列表里有任务,先执行微任务再执行宏任务
块级作用域 暂时性死区 能否被修改
没有this call apply方法修改this无效
没有prototype属性
没有argument
不能使用new 不能用作构造函数,会报错
持续更新中
以上就是关于一到js优化面试题全部的内容,包括:一到js优化面试题、你遇到的前端面试题都有什么、2021前端面试题-JS篇等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)