浅谈一下this关键字

简介: 浅谈一下this关键字

思维导图

f9508e34160643f984c745bac319ec2e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


为什么要使用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指向关键是看函数是如何调用的,箭头函数除外,箭头函数是看源代码写哪了。下篇文写~



目录
相关文章
|
2月前
|
JavaScript 前端开发 开发者
创建一个私有变量和私有方法的闭包
【10月更文挑战第26天】可以在JavaScript中创建具有私有变量和私有方法的闭包,实现数据的封装和隐藏,提高代码的可维护性和安全性。不同的方式适用于不同的场景,开发者可以根据具体的需求选择合适的方法来创建闭包。
|
7月前
|
存储 数据安全/隐私保护 C++
C++一分钟之-C++中的静态成员与静态函数
【6月更文挑战第20天】在C++中,静态成员(变量&函数)打破对象实例化规则,提供类级共享。静态变量独占一份,用于计数或共享配置,需类外初始化,注意访问权限。静态函数不依赖对象,直接通过类名调用,不使用`this`指针,适合工具函数或操作静态变量。示例展示了静态成员的使用,强调了理解和避免常见问题的重要性。
62 4
|
8月前
|
存储 编译器 对象存储
【C++】类与对象(构造函数、析构函数、拷贝构造函数、常引用)
【C++】类与对象(构造函数、析构函数、拷贝构造函数、常引用)
54 0
|
8月前
|
C++
c++类与对象(五):友元、内部类、临时对象、匿名对象
c++类与对象(五):友元、内部类、临时对象、匿名对象
50 0
|
编译器 C++
类和对象:初始化列表,静态成员,友元,内部类,匿名对象
类和对象:初始化列表,静态成员,友元,内部类,匿名对象
|
编译器
匿名对象与构造器
匿名对象与构造器
80 0
|
测试技术 uml
super关键字
super关键字
62 0
|
Java 编译器
构造函数中为什么要用this关键字?
构造函数中为什么要用this关键字?
86 0
|
编译器
Super关键字详解
Super关键字详解
100 0