图文结合深入理解JS中的this值

文章目录Js 中奇妙的this值1. 初探this2. this指向总结2.1 普通函数调用2.2 对象的方法调用2.3 构造函数调用2.4 利用call,apply,bind方法调用函数Js 中奇妙的this值在 JS 中最常见的莫过于函数了,在函数(方法)中 this 的出现频率特别高,那么 this 到底是什么呢,今天就和大家一起学习总结一下 JS 中的 this。1. 初探this...
摘要由CSDN通过智能技术生成

Js 中奇妙的this值

JS 中最常见的莫过于函数了,在函数(方法)中 this 的出现频率特别高,那么 this 到底是什么呢,今天就和大家一起学习总结一下 JS 中的 this

1. 初探this

thisJS 中是一个关键字,不是变量也不是属性名, JS 中不允许给this赋值。

它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。

this 指向的是函数运行时所在的环境,也就是说函数在哪个环境中运行,this 的值就指向哪个环境。
先看下面这段代码的输出结果:

function f() {
   
	console.log(this.x);
}
var obj = {
    
	f: f,
	x: 1
};
var x = 2;

f(); // 2
obj.f(); // 1

有点奇怪,obj.ff 明明指向的是同一个函数为什么执行结果是不同的呢?

原因就在于这两个函数运行时所在的环境是不同的。

可以结合下面的两张图来理解
图一描述了上面这段代码的作用域链
图二描述了运行 obj.f() 时的部分执行过程
图一
图一
在这里插入图片描述
图二

如图二所示,执行obj.f() 时,obj 对象需要先找到 f 属性,然后通过 f 属性中的 value 值获取到 f 函数的地址,通过这个地址再获取到 f 函数实际的代码开始运行,因此此时 f 函数运行时所在的环境是 obj 环境。因为 obj环境下 x 的值是 1 ,所以最终输出的值为 1

执行 f() 时,实际上是从全局对象 window 中找到 f 函数,然后再执行。此时 f 函数运行时所在的环境是全局环境,因为全局环境下的 x 的值为 2 ,因此最终输出的值为 2

下面是另外一个值得注意的地方:

this 值没有作用域的限制,嵌套函数不会从它的包含函数中继承 this很多人误以为调用嵌套函数时 this 值会指向它的外层函数的变量对象,其实并不是这样的。
如果想访问这个外层函数的 this 值,需要将 this 值保存在一个变量里,通常使用 self 来保存this

再看下面这段代码:

let foo = function(
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值