一道题引发的思考:JavaScript 中的 this 指代什么

背景

《现代 JavaScript 教程》中的题目

在这里插入图片描述

语法

很多面向对象的语言在语法层面都会绑定 this:在对象中定义的方法总是有指向该对象的 this
也就是说,创建对象实例后,在对象方法中的 this 关键字会绑定到这个对象实例上

但是 JavaScript 不同,它的 this 取值不取决于方法声明的位置,而是取决于是哪个对象执行了该方法,取决于代码执行的上下文环境,这很重要。

在函数里定义的 this,要看具体执行这个函数的是哪个对象
如果没有对象,即全局环境,分两种情况

  1. 严格模式:this 是 undefined
  2. 非严格模式:this 是全局对象(浏览器中的 window)

题目

在这里插入图片描述

分析

我们讨论在严格模式下的情况,答案是会报错

在这里插入图片描述
首先,makeUser() 函数是在全局环境下用 “函数声明” 定义的函数
在代码第八行执行了这个函数,此时的上下文是全局上下文,所以 this 是 undefined
那么得到的 user 变量是这样的结构

user = {
	name: "John",
	ref: undefined
}

所以在第十行访问 user.ref.name 的时候,相当于 undefined.name,所以会报错
ps:我一开始没搞懂这个 undefined 是从哪儿来的,其实是定位到代码执行第八行的结果

答案

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值