this绑定和优先级

this 指向的情况,调用的方式有关
与 this 所处的函数没多少关系,绑定和定义的位置(编写的位置)没有关系
函数在调用时,JavaScript 会默认给 this 绑定一个值
函数被调用方式有关,绑定
和调用方式
以及调用的位置
有关系
this 是在运行时被绑定的
开发中常常用在函数使用
- 所有的函数在被调用时,都会创建一个执行上下文
- 这个上下文中记录着函数的调用栈、AO 对象等
- this 也是其中的一条记录
this 绑定的情况
- 默认绑定
- 隐式绑定
- 显示绑定
- new 绑定
一、默认绑定
什么情况下才默认绑定?
独立的函数中调用
1 | function foo(){ |
1 | var obj = { |
闭包指向 window?
不一定
因为跟函数调用的方式
有关
- 全局才是指向 window
1 | // 闭包 |
二、隐式绑定
通过某个对象进行调用的
就是它的调用位置中,是通过某个对象发起的函数调用
谁调用它指向它
1 | var obj1 = { |
三、显示绑定
- call
- apply
- bind
绑定的前提式一个函数
否则会报错
call/apply
js 中所有函数都有这个方法
call 和 apply 有什么区别?
第一个参数是相同的都是对象,后面的参数,call 为参数列表,apply 为数组
1 | sum.call("call", 20, 30, 40) |
bind
返回一个函数,需要自己调用
四、new 绑定
- 创建一个空对象
- this 指向这个对象
- 在对象身上添加属性
- 返回这个对象
this 绑定的优先级
显示绑定优先级 > 隐式绑定
new 绑定优先级 > 隐式绑定
new 绑定优先级 > bind
new 绑定和 call、apply 是不允许同时使用的,所以不存在谁的优先级更高
new 绑定可以和 bind 一起使用,new 绑定优先级更高
特殊的 this 指向
当 call/ apply/ bind 传入 null underfind,this 指向是 全局 window
1 | function foo() { |
箭头函数
没有 this
是通过作用域来访问上层的 this