如何用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的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼:

相關文章
相關標籤/搜索