如何用JavaScript實現2+2=5?

i042416發表於2018-08-21

我大學畢業找工作時,經常做一些稀奇古怪的面試題。這不,給大家分享一道整蠱的面試題,它其實不能算一道正式的面試題,大家可以用它來捉弄你們那些程式設計師朋友。

題目:如何用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>

如何用JavaScript實現2+2=5?

會先後彈出兩個對話方塊,依次顯示6,5。

但是,第二個函式f裡面,明明變數H被賦成了2, 2 + 2 應該等於4才對,為什麼答案是5????

我們用Chrome開發者工具除錯一下,看看到底有什麼玄虛。

為什麼函式f裡有兩個看起來一模一樣的H,但是一個值為2,一個值為3?

如何用JavaScript實現2+2=5?

到現在,肉眼已經不能幫助我們了。那麼我們就請出winHex這款16進位制檔案編輯與磁碟編輯神奇出馬。

先從百度上搜尋ASCII,得知大寫字母的H的十六進位制編碼為48.

如何用JavaScript實現2+2=5?

然後我們用WinHex開啟上述程式碼檔案,果然發現了這個48的16進位制編碼對應了大寫H。

如何用JavaScript實現2+2=5?

同樣,加號“+”的16進位制編碼是2B:

如何用JavaScript實現2+2=5?

如何用JavaScript實現2+2=5?

空格為20。

所以謎底在這裡,加號前面肉眼看起來像大寫字母H的變數“H",其實並不是H,其16進位制編碼為CE 97。它的值在函式f裡賦為2,而大寫H賦為3,2 + 3 = 5,所以彈出窗裡我們看到的結果是5。

如何用JavaScript實現2+2=5?

這道題其實並沒有考察JavaScript裡閉包等知識點,而是一個障眼法,惡作劇。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2212449/,如需轉載,請註明出處,否則將追究法律責任。

相關文章