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

我大学毕业找工做时,常常作一些稀奇古怪的面试题。这不,给你们分享一道整蛊的面试题,它其实不能算一道正式的面试题,你们能够用它来捉弄大家那些程序员朋友。html

题目:如何用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.code

而后咱们用WinHex打开上述代码文件,果真发现了这个48的16进制编码对应了大写H。

一样,加号“+”的16进制编码是2B:

空格为20。

因此谜底在这里,加号前面肉眼看起来像大写字母H的变量“H",其实并非H,其16进制编码为CE 97。它的值在函数f里赋为2,而大写H赋为3,2 + 3 = 5,因此弹出窗里咱们看到的结果是5。

这道题其实并无考察JavaScript里闭包等知识点,而是一个障眼法,恶做剧。

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

相关文章
相关标签/搜索