如何用JavaScript实现2+2=5?

我大学毕业找工作时,经常做一些稀奇古怪的面试题。这不,给大家分享一道整蛊的面试题,它其实不能算一道正式的面试题,大家可以用它来捉弄你们那些程序员朋友。
题目:如何用JavaScript实现2+2=5?
答案如下。
新建一个txt文件,然后把后缀名改为.html, 再用浏览器打开。
<html>
<script>
g = function () {
H = 3
return H + H
}
f = function () {
Η = 2
return Η + H
}
// 3 + 3 = 6
alert(g())
// 2 + 2 = 5
alert(f())
</script>
</html>
会先后弹出两个对话框,依次显示6,5。
但是,第二个函数f里面,明明变量H被赋成了2, 2 + 2 应该等于4才对,为什么答案是5????
我们用Chrome开发者工具调试一下,看看到底有什么玄虚。
为什么函数f里有两个看起来一模一样的H,但是一个值为2,一个值为3?
到现在,肉眼已经不能帮助我们了。那么我们就请出winHex这款16进制文件编辑与磁盘编辑神奇出马。
先从百度上搜索ASCII,得知大写字母的H的十六进制编码为48.
然后我们用WinHex打开上述代码文件,果然发现了这个48的16进制编码对应了大写H。
同样,加号“+”的16进制编码是2B:
空格为20。
所以谜底在这里,加号前面肉眼看起来像大写字母H的变量“H",其实并不是H,其16进制编码为CE 97。它的值在函数f里赋为2,而大写H赋为3,2 + 3 = 5,所以弹出窗里我们看到的结果是5。
这道题其实并没有考察JavaScript里闭包等知识点,而是一个障眼法,恶作剧。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:


如何用JavaScript实现2+2=5?的更多相关文章
- 如何用Javascript检测到所有的IE版本
如何用Javascript检测到所有的IE版本 function GetIEVersion() { var sAgent = window.navigator.userAgent; var Idx = ...
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 编程原理—如何用javascript代码解决一些问题
关于编程,我最喜欢的就是解决问题.我不相信有谁天生具有解决问题的能力.这是一种通过反复锻炼而建立并维持的能力.像任何练习一样,有一套指导方针可以帮助你更有效地提高解决问题的能力.我将介绍5个最重要的软 ...
- 如何用JavaScript在页面上显示一个时间钟表
<html><head><script type="text/javascript">function myTime(){var today=n ...
- 如何用 JavaScript 下载文件
简介 我们知道,下载文件是一个非常常见的需求,但由于浏览器的安全策略的限制,我们通常只能通过一个额外的页面,访问某个文件的 url 来实现下载功能,但是这种用户体验非常不好. 幸好,HTML 5 里面 ...
- 如何用JavaScript复制到剪贴板
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 如何用JavaScript制作循环图形
[图题思路] 1.确定图形一共几行,即为外层的循环的次数 2.确定每行有几种元素,代表有几个内层循环 3.确定每种元素的个数,即为每个内层循环的次数Tips:通常,找出每种元 ...
- 如何用javascript获取和设置css3属性
==================获取======================== 我想到的第一个思路 var test = document.getElementById('test'); c ...
- FineReport中如何用JavaScript自定义地图标签
在日常使用地图过程中,通常会遇到地图标签,提示点等显示不满足我们的需求,需要进行JavaScript代码编写. 例如:在使用地图过程中,会发现很多地名显示的位置偏离.这时候就需要使用JavaScrip ...
随机推荐
- 第3章 编写ROS程序-1
1.创建工作区和功能包 在我们写任何程序之前,第一步是创建一个容纳我们的功能包的工作区,然后再创建功能包本身. 创建工作区 使用标准的mkdir命令行去创建一个目录,我们将把这个新的目录称作工作区目 ...
- FZU - 2218 Simple String Problem(状压dp)
Simple String Problem Recently, you have found your interest in string theory. Here is an interestin ...
- 从RAID看垂直伸缩到水平伸缩的演化
磁盘的读写过程,最消耗时间的地方就是在磁盘中磁道寻址的过程,而一旦寻址完成,写入数据的速度很快. 连续写入:写入只寻址一次 存储位置与逻辑位置相邻 不用多次寻址 随机写入:每写一次 便寻址一次 增加了 ...
- PowerDesigner设计表时显示注释列Comment,Columns中没有Comment的解决办法
我使用的PowerDesigner版本为16.5,如下图: 在所要编辑的表上双击,打开Table Properties窗口,并将上面的选项卡切换到Columns,如下图: 我们点击Customize ...
- Linux运用一些常用命令
今天搜集整理了一些Linux服务器运维常用命令,希望对大家有帮助:1.删除0字节文件 find -type f -size 0 -exec rm -rf {} 2.查看进程按内存从大到小排列 ps - ...
- hdu1688(dijkstra求最短路和次短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1688 题意:第k短路,这里要求的是第1短路(即最短路),第2短路(即次短路),以及路径条数,最后如果最 ...
- 洛谷P1228 地毯填补问题
P1228 地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站 ...
- 洛谷P3645 [APIO2015]雅加达的摩天楼(最短路+分块)
传送门 这最短路的建图怎么和网络流一样玄学…… 一个最朴素的想法是从每一个点向它能到达的所有点连边,边权为跳的次数,然后跑最短路(然而边数是$O(n^2)$除非自创复杂度比spfa和dijkstra还 ...
- docker镜像创建
1. 首选要创建一个Dockerfile文件,内容如下: FROM alpine:latest MAINTAINER lobin <lobin.hotmail.com> RUN apk ...
- js根据等号(=)前名称获取参数值
var GetUrlParam=function (paraName) { var url = document.location.toString(); var arrObj = url.split ...