不时参加编码测验有助于刷新我们的编程知识。这就是我决定发布一些 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
请留意下一次测验!