今天在群里看到大家在讨论一个问题,就是 this
的指向,并且牵扯到了 let
,const
的变量提升,比如说在全局顶部声明的 let
变量能否挂载到 window
下之类的。
还是老流程,先讨论第一个问题,然后再开始牵扯到后续的展开。
this
指向大概分为两种,普通函数内的 this
和 箭头函数内的 this
,箭头函数内的 this
其实挺好理解的,主要是因为各种 call()
、apply()
、bind()
和 new
影响下的 this
指向问题。
先来最简单的demo来说明 this
的最终指向的是那个调用它的对象
function t1(){
console.log(this);
}
t1() // logs Window
// 其实等同于 window.t1()
var t2 = {
name:'t2',
fn:function(){
console.log(this);
}
}
t2.fn(); // logs {name: "t2", fn: ƒ}
var t3 = {
a:1,
b:{
fn:function(){
console.log(this.a)
}
}
}
t3.b.fn() // logs undefined
// t3.b中并没有属性a
这样就很好理解了,就是从谁的身上点出来的方法,这个 this
就是在指向谁的。如果没有默认就是 window
(严格模式下稍有不同是 undefined
),例如 t1()
# 构造函数中的 this
# Call
, Apply
, Bind
影响下的 this
# Class
下的 this
未完成
突然发现之前还有一个坑没有填,我先去把旧坑填完。
附
函数的扩展 - ECMAScript 6入门
彻底理解js中this的指向,不必硬背 - 追梦子
那些年我们一起过的JS闭包,作用域,this,让我们一起划上完美的句号 - 追梦子
如何理解 Call, Apply, Bind?