携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情

思维导图

为什么要使用this

当时是它有好处呀,方便,毕竟它喜欢瞎几把乱指,其实人家this并没有好。是个规规矩矩的乖孩子。

为什么使用: this 提供了一种更优雅的方式来隐式“传递”一个对象引用。可以简化开发者的工作,当时前提是你彻底搞懂它的机制。

this 关键字是 JavaScript 中最复杂的机制之一。它是一个很特别的关键字,被自动定义在 所有函数的作用域中。

function getName(obj) {

console.log(obj.name);

}

function getName1() {

console.log(this.name);

}

var obj = {

name:'铁憨憨'

}

getName(obj); // 铁憨憨

getName1.call(obj); // 铁憨憨

直接传递对象作为函数的参数,和使用this指向obj对象效果是一样的。

当我们书写更复杂跟 * 山一样的代码,this就更加显得重要了。

this误解

this 指向函数自身 ?

先说明这是错误的。不信?下面来个例子

var where = '跑路了'

function fn() {

console.log(this.where); // 跑路了

console.log(fn.where); // "无名氏"

}

fn.where = '无名氏'

fn()

所以this 指向函数自身是错误的哦~

this 指向函数的作用域

在某种情况下它是正确的,但是在其他情况下它却是错误的。这只是某一种情况而已。

注意: this 在任何情况下都不指向函数的词法作用域

function foo() {

var a = 2;

this.bar();

}

function bar() {

console.log(this.a);

}

foo(); // ReferenceError: a is not defined

调用 bar() 最自然的方法是省略前面的 this,直接使用词法引用标识符,不能使用 this 来引用一 个词法作用域内部的东西。

this到底是什么?

当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文)。这个记录会包 含函数在哪里被调用(调用栈)、函数的调用方法、传入的参数等信息。this 就是记录的 其中一个属性,会在函数执行的过程中用到。

其实this指向关键是看函数是如何调用的,箭头函数除外,箭头函数是看源代码写哪了。下篇文写~