this
this是Javascript语言的一个关键字。 随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则, 谁调用,this就指向谁 。
this的指向(4种)
- 在全局作用域或者普通函数中,this指向全局对象window
![94d918647d22e892c0bb268d36dc8f90.png](https://i-blog.csdnimg.cn/blog_migrate/891dbcc2623b4e054db96fd2fa3a304f.jpeg)
2.方法调用中,谁调用指向谁
![c003461665514e35955e99ac3cd34bf8.png](https://i-blog.csdnimg.cn/blog_migrate/0e1f7283c637591a5e71f937944cfdef.jpeg)
3.在构造函数或者构造函数原型对象中,this指向构造函数的实例
![5eae9e130252a8aed783b4c944890fd3.png](https://i-blog.csdnimg.cn/blog_migrate/67ef480dfa0b760c82b44ac0fdc476b5.jpeg)
4. 箭头函数指向外层作用域的 this
![6069a6d691b544627b908fba97c86104.png](https://i-blog.csdnimg.cn/blog_migrate/66335f79a61e69de787f90b1f6bc511a.png)
es6中的箭头函数与普通函数有什么区别?
- 普通函数this指向调用者,箭头函数的this指向定义的环境(bindcallapply都不能改变this的指向)
- 箭头函数没有arguments,没有函数体,需要使用...rest代替
- 箭头函数不能作为构造函数,不能new
- 箭头函数不能使用yield命令,不能作为generator函数
- 箭头函数没有原型属性
- 变量提升:在js的内存机制里,function的级别最高。而箭头函数定义函数是,需要var、let、const等关键字,而只有var能进行变量提升,所以箭头函数定义一定要在调用之前
bind、call和apply有什么区别?
- 同:bind、call和apply的第一个参数都是this
- 异:
- call,传参方式是列举<