携手创作,共同成长!这是我参与「掘金日新计划 · 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指向关键是看函数是如何调用的,箭头函数除外,箭头函数是看源代码写哪了。下篇文写~