JavaScript 测验 #1 和 #2
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2800+ 小伙伴加入学习 ,欢迎点击围观
不时参加编码测验有助于刷新我们的编程知识。这就是我决定发布一些 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
请留意下一次测验!