zoukankan      html  css  js  c++  java
  • 如何用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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

  • 相关阅读:
    定义一个动态的二维数组?
    学习STL map, STL set之数据结构基础
    CMM
    详细解说STL string
    仔细选择你的容器
    C++字符串类string简析
    流氓软件及反流氓软件的技术分析
    标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
    C++资料下载
    unix系统操作命令大全
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/9810279.html
Copyright © 2011-2022 走看看