JavaScript 测验 #1 和 #2

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

不时参加编码测验有助于刷新我们的编程知识。这就是我决定发布一些 JavaScript 测验的原因。他们肯定会测试您对一些重要的 JavaScript 概念的了解。

假设我们有以下 JavaScript 代码:


 var someVar = 1;
var someObject = {
someVar: 2,
someMethod: function () {
var someVar = 3;

alert(this.someVar); //What is the result ???

setTimeout(function(){ alert(this.someVar); //What is the result ??? }, 10); } };

someObject.someMethod();


问题 :每个警报的输出是什么,为什么?

*把你的答案写在一张纸上,然后阅读答案。*


回答

为了理解这个 JavaScript 示例是如何工作的,我们应该知道 JavaScript“this”关键字是如何工作的。重要的是要知道在 JavaScript 方法的主体中,“this”计算为调用该方法的对象。

这意味着在第一个警报的“this.someVar”表达式中,“this”将计算为调用 someMethod 方法的 someObject 对象,结果为 2(第 3 行中设置的值)。

在第二个警报的“this.someVar”表达式中,由于 window.setTimeout ,“this”将被评估为 Window 全局对象,这将导致 1(第 1 行中设置的值)。

你答对了吗?如果是这样,请拍拍自己的背。并为下一次测验做好准备!


JavaScript 测验 #2

假设我们有以下 JavaScript 代码:


 var someVar = 1;
var someObject = {
someVar: 2,
someMethod: function () {
var someVar = 3;

alert(this.someVar); //What is the result ???

setTimeout(function(){ alert(this.someVar); //What is the result ??? }, 10); } };

someObject.someMethod();

问题 :每个警报的输出是什么,为什么?

*把你的答案写在一张纸上,然后阅读答案。*


回答

为了理解这个 JavaScript 示例将如何工作,我们应该了解以下内容:
1. JavaScript“this”关键字是如何工作的。
2. JavaScript 运算符如何工作。

我在上面详细说明了 JavaScript“this”关键字的工作原理:“this”计算为调用该方法的对象。这意味着 setIimeout 中的 _this.someVar 将被评估为 2。

了解“+”算术运算符的工作原理很重要,在以下行中:

var result = _this.someVar + this.someVar;

此行中 result 的值将计算为:2 + “1” = “21”。这是因为“+”算术 JavaScript 运算符总是有利于字符串,这意味着如果你有一个 numeric + String ,数字操作数将被转换为一个字符串,“+”算术运算符的结果将是一个简单的字符串连接.

来到下一行:

result > 20

这里有一个字符串和一个数字之间的比较,与“+”算术运算符不同,JavaScript 关系运算符偏爱数字,这意味着 result 将被转换为整数,因此比较将是 21 > 20 将被评估为真。

最后在以下行中:

+result--;

“+”一元运算符可用于将其操作数转换为整数,但是,它在这里作为表达式的求值不起作用。后自增运算符在它之前执行,它将 result 转换为整数并将其减 1。

因此,警报将按此顺序产生以下输出:
1. 21
2. 20

请留意下一次测验!

相关文章