绕不开的this

犹豫两秒要不要整理this,从红皮书上看了半天,没搞懂哎(弱爆了)


什么是this?
this是在执行上下文创建时期创建的一个执行过程中不可改变的变量。
执行上下文是指js引擎会将代码执行前需要的变量this提前声明好保存在变量对象中的过程,作用域链也保存在这样类似数组的形式存储在函数中的scope属性中。
this之所以有多变性是因为this只在创建阶段调用,执行上下文创建阶段复制。

this在不同情况下的指向不同

1、严格模式下
this的指向是undefine
2、非严格模式下,this指向的是window,当obj在全局声明的时候,内部的this指向全局对象,当obj在一个函数中声明的时候(也就是作为纯函数),严格模式下this会指向undefine,非严格模式会自动转为全局对象。
3、作为对象的用法this等于那个对象,指向调用对象

var a = 1;
var obj = { 
    a: 2,
    b: function() { 
    return this.a;
    } 
} 
console.log(obj.b())//2

分析:定义了一个全局变量,然后定义了一个对象,会返回一个字符串,调用的是obj的b方法,所以返回的是2

var a = 1;
var obj = { 
  a: 2, b: function() { return this.a; } } var t = obj.b; console.log(t());//1

分析:调用obj.b()时会立即返回一个字符串,只能找到 var = 1

4、call、apply、bind会将this绑定给对象,可以改变this的指向

5、构造函数
函数和new关键词一起使用时,我们称函数为构造函数,首字母大写(化成灰老子也认识你),this指向新创建出来的对象。
6、箭头函数
不能用call和apply,会捕获其上下文的this值,在创建的时候就已经绑定

7、定时器中的this指向的是window

总结

扫描二维码关注公众号,回复: 1005107 查看本文章

关于this万变不离其宗,this永远指向正在执行的函数或者对象

               

猜你喜欢

转载自www.cnblogs.com/jinzhou/p/9075814.html