说一说JS中的this
# this指向问题
- 全局环境下
在全局环境下,this 始终指向全局对象(window)
- 函数直接调用(普通函数内部的this分两种情况,严格模式和非严格模式。)
- 非严格模式下,this 默认指向全局对象window
- 而严格模式下, this为undefined
- 对象中的this(对象内部方法的this指向调用这些方法的对象,)
- 函数的定义位置不影响其this指向,this指向只和调用函数的对象有关。
- 多层嵌套的对象,内部方法的this指向离被调用函数最近的对象(window也是对象,其内部对象调用方法的this指向内部对象, 而非window)。
- 构造函数中this
构造函数中的this与被创建的新对象绑定。
- 箭头函数中的 this
由于箭头函数不绑定this, 它会捕获其所在即定义的位置上下文的this值(父作用域), 作为自己的this值。
call、apply、bind无法改变箭头函数的this
# call、apply、bind可以改变this指向
call、apply参数形式不同
bind返回的是一个函数