如何用JavaScript實現2+2=5?
我大學畢業找工作時,經常做一些稀奇古怪的面試題。這不,給大家分享一道整蠱的面試題,它其實不能算一道正式的面試題,大家可以用它來捉弄你們那些程式設計師朋友。
題目:如何用JavaScript實現2+2=5?
答案如下。
新建一個txt檔案,然後把字尾名改為.html, 再用瀏覽器開啟。
<html><script>g = function () { H = 3return H + H } f = function () { Η = 2return Η + H }// 3 + 3 = 6alert(g())// 2 + 2 = 5alert(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裡閉包等知識點,而是一個障眼法,惡作劇。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2212449/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入理解 Java 的整型型別:如何實現 2+2=5?Java型別
- 如何用es5實現繼承繼承
- 如何用JavaScript手動實現一個棧JavaScript
- 說說如何用 JavaScript 實現一個模板引擎JavaScript
- Javascript實現MD5加密JavaScript加密
- 如何用 JavaScript 實現一個陣列惰性求值庫JavaScript陣列
- 通過java程式模擬實現地鐵票價2+2=12Java
- 如何用 3KB 不到的 JavaScript 實現微機模擬器JavaScript
- 如何用Phaser實現一個全家福拼圖H5H5
- 如何用iptables實現NAT(zt)
- Javascript實現HTML5重要語言JavaScriptHTML
- 如何用H5實現一個觸屏版的輪播器?H5
- 如何用Redis實現搜尋介面Redis
- 如何用 Redis 實現分散式鎖Redis分散式
- 如何用 UDP 實現可靠傳輸?UDP
- 如何用css實現"等高佈局"。CSS
- 如何用 Python 實現 Web 抓取?PythonWeb
- 如何用JavaScript獲取圖片的真實尺寸大小JavaScript
- 如何用html實現圓形雲臺HTML
- 教你如何用 Java 實現非同步呼叫Java非同步
- 面試官:如何用LinkedHashMap實現LRU面試HashMap
- 如何用RabbitMQ實現延遲佇列MQ佇列
- 如何用Go快速實現規則引擎Go
- 如何用Css3實現Switch元件CSSS3元件
- 如何用canvas實現大波紋灌水效果Canvas
- 如何用REDIS實現分散式快取Redis分散式快取
- 如何用PHP實現Socket伺服器PHP伺服器
- 如何用SQL語句實現以下功能.SQL
- JavaScript Ajax 實現JavaScript
- 實時搜尋:如何用Javascript客戶端保證安全JavaScript客戶端
- 如實實現不同資料庫之間的 (模型) Eloquent: 關聯資料庫模型
- 教你如何用smokeping實現釘釘告警
- 教你如何用 MongoDB 實現評論榜功能MongoDB
- 如何用istio實現請求超時管理
- 你知道如何用 PHP 實現多程式嗎?PHP
- 看我如何用定值 Cookie 實現反爬Cookie
- 如何用六西格瑪實現完美結果?
- 如何用C++實現自己的TensorflowC++