下面这几道JavaScript题目大多来自于周五的一个小分享。都是很小的题目,但是很容易犯错。有一些是语言特性使然,有一些则是语言本身没有设计好而留下的陷阱。结果就是,遇到的人很容易陷进去骂娘,这些东西是略有些反直觉,感兴趣的不妨看看,平时我们还是尽量少些这样似是而非的代码。
1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function Container( properties ) {
var objthis = this ;
for ( var i in properties ) {
( function (){
var t = properties[i];
objthis[ "get" + i ] = function () { return t;};
objthis[ "set" + i ] = function (val) {t = val;};
})();
}
} var prop = {Name : "Jim" , Age : 13};
var con = new Container(prop);
console.log(con.getName()); con.setName( "Lucy" );
console.log(con.getName()); console.log(prop.Name); |
这段代码会输出什么?前面两行分别是“Jim”和“Lucy”,这不会有问题;但是第三行应该输出的是“Jim”,但是有的人会误认为prop对象已被修改,故输出“Lucy”。其实在匿名函数中,properties[i]的值已经赋给了临时变量t,之后闭包对于外部变量的引用完全由t这个媒介来完成,因此prop传入以后并未发生任何属性的更改。
2.
1
2
3
4
5
|
function a (x) {
return x * 2;
} var a;
console.log(a); |
这段代码中,其实var a并没有任何影响,输出的是a(x)这样的方法签名。
3.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
c = 999; var c = 888;
console.log( this .c); //①
function b (x, y, c) {
c = 6;
arguments[2] = 10;
console.log(c); //②
console.log( this .c); //③
var c = 6;
console.log(c); //④
console.log( this .c); //⑤
} b(1, 2, 3, 4); |
这道题是比较变态的。
- 第①处,this指的是window,在window下,c、this.c、var c在这里指的是同一个东西,看透这一点就好办了。打印的是888。
- 第②处,方法体中,参数c和arguments[2]指的是同一个地址,所以把后者赋为10的时候,打印的是10,不是6。
- 第③处,this指的是window,打印的是888。
- 第④处,打印的是6。
- 第⑤处,打印的是888。
4.
1
2
3
4
5
6
7
8
9
|
var start = new Date();
setTimeout( function (){
var end = new Date();
console.log(end - start);
},
1000
); while ( new Date() - start < 2000);
|
JavaScript因为是单线程工作的,因此虽然毁掉函数设置了1000毫秒后执行,事实上在1000毫秒的时候根本得不到执行,等待到while循环执行完毕后(因此已经是2000毫秒以后了),才去执行,因此输出应该是一个大于2000的数字。
5.
1
2
3
|
( function (){
console.log( typeof arguments);
})(); |
很多人会说打印的是array,其实,arguments不是数组,打印的是object。
6.
1
2
|
function a(){ return a;}
console.log( new a() instanceof a);
|
应该打印的是false,其实原因很简单,new a()的时候,因为return语句,得到的不是a的实例,而是a本身,a instanceof a当然是false啦。
最后,还有一个小题目是关于Function Invocation Pattern的,我在这篇文章里有写到,就不单独贴出来了。
文章系本人原创,转载请保持完整性并注明出自《四火的唠叨》
相关推荐
总的来说,JavaScript预编译是现代前端开发中不可或缺的一部分,它提升了代码的可读性和性能,同时也降低了出错的可能性。理解预编译的原理和应用,有助于我们编写更高效、更健壮的JavaScript代码。通过使用各种预...
它可以根据用户的需求生成不同数量的题目,如10道、20道、50道或100道,这适应了不同的学习场景,既可以用于课堂练习,也可以作为家庭作业的一部分。系统还能根据学生的实际水平调整题目的复杂度,使得学习更具针对...
在JavaScript中,我们可以利用Math对象来生成随机数字,并结合基本的算术运算符(如+,-,*,/)来构造各种心算题目。例如,我们可能生成两个1到100之间的随机数,然后让用户提供它们的和、差、积或商。同时,为了...
7. **错误提示和样式控制**:在验证失败时,JavaScript可以改变元素的样式(如添加红色边框或错误提示文字)以告知用户哪里出错,并提供纠正的指引。 8. **跨域资源共享(CORS)**:如果验证涉及到不同源的数据,理解...
赋值语句x="今天天气真好"不会出错,JavaScript允许不同类型之间的转换。 8. 错误。表达式的类型不仅取决于运算符,也取决于操作数。 9. 错误。两个整数相除的结果是浮点数。 10. 正确。如果a=true且b未定义,a&&b的...
标题“每日100道加减题”暗示这是一个与编程练习相关的项目,目的是通过每日解决100道加减运算题目来提升编程技能,特别是算法和逻辑思维能力。描述中的内容提示这可能是一个初级水平的练习,初始设定是只需要完成6...
前言:javascript里变量作用域是个经常让人头痛抓狂的问题,下面通过10++个题目,对经常遇到又容易出错的情况进行了简单总结,代码样例很短很简单 题目一 代码如下: var name = ‘casper’; alert(name); /...
### 华为OD机试C卷 - 出错的或电路题目分析与解答 #### 题目背景 本题目来源于华为OD机试C卷,主要考察的是算法设计能力,特别是针对二进制数处理的理解与应用。题目背景是某生产门电路的厂商发现其生产的或门电路...
23. **JavaScript语法**:题目23中,`a*b`不是合法的JavaScript标识符,因为它包含非法字符*。 24. **Windows设置**:题目24指出双击任务栏时间可以修改日期,这是正确的。 25. **文件删除**:在Windows中,从硬盘...
Exercism是一个在线平台,它提供了各种编程语言的练习题目,帮助开发者提升技能。在本案例中,"exercism_solutions"是一个针对JavaScript轨道问题的解决方案集合,用户在这个项目中分享了他们如何解决Exercism提供的...
题目涉及到了`window`对象的几个常用属性:`opener`、`parent`、`top`、`self`。 **知识点:** - **`opener`**:指向打开当前窗口的窗口对象。 - **`parent`**:指向当前窗口的父窗口。 - **`top`**:指向最顶层的...
传统的教学管理模式下,学生信息管理和成绩记录等工作通常依赖于人工操作,这种方式不仅效率低下,而且容易出错。特别是在处理大量数据时,传统方法往往会暴露出诸多不足,如安全性差、准确性不高、灵活性不足等问题...
此类小程序通常包含以下几个核心功能模块: 1. 用户登录与注册:为了保护用户数据的安全性和提供个性化服务,小程序需要用户进行登录注册。可以支持微信快捷登录,方便用户快速接入。 2. 题库管理:后台系统需维护...
将复杂的代码段落拆解成最小的单元,这不仅有助于理解每一部分的作用,而且有利于在出错时快速定位问题。例如,对于JavaScript中的`['1','2','3'].map(parseInt)`问题,拆解代码并逐一检查,可以发现`parseInt`函数...
- **题目**: Javascript中OnChange()事件产生于 i] Textbox中的内容发生变化 ii] Textarea中的内容发生变化 iii] 选择listbox中的项目 iv] 选中checkbox **正确答案**: D - **解析**: `onChange`事件通常...
FizzBuzz问题是一个经典的编程面试题目,它的目标是编写一个程序,打印从1到给定数n之间的所有数字,但有以下规则: 1. 当数字可以被3整除时,输出"Fizz"。 2. 当数字可以被5整除时,输出"Buzz"。 3. 当数字同时可以...
2. **用户界面**:JavaScript将用于创建一个用户友好的界面,展示题目、接收用户输入、显示结果和反馈。这可能涉及到DOM操作(Document Object Model),用于在网页上添加、修改或删除元素。 3. **逻辑处理**:当...
这些题目涵盖了计算机科学和技术的多个方面,主要涉及到编程语言(Python、JavaScript)、数据库管理、CSS样式、数据处理(Excel公式)、多线程同步以及程序调试等知识点。下面将对每个题目进行详细的解释: 1. ...
根据给定文件的信息,我们可以总结出以下几个重要的计算机二级考试知识点: ### 1. 计算机基本原理 **题目:** 电子计算机技术在半个世纪中虽有很大进步,但至今其运行仍遵循着一位科学家提出的基本原理。他就是___...
在"MissingWord"游戏中,JavaScript主要承担了以下几个关键角色: 1. **用户交互**:JavaScript提供动态交互功能,使得游戏界面生动活泼。玩家在猜测单词时,JavaScript实时处理用户的输入,显示正确与否的反馈,...