Недавний твит содержал этот фрагмент JavaScript.
Может кто-нибудь объяснить, что происходит в нем шаг за шагом?
> function dis() { return this }
undefined
> five = dis.call(5)
Number {[[PrimitiveValue]]: 5}
> five.wtf = 'potato'
"potato"
> five.wtf
"potato"
> five * 5
25
> five.wtf
"potato"
> five++
5
> five.wtf
undefined
> five.wtf = 'potato?'
"potato?"
> five.wtf
undefined
> five
6
В частности, мне не ясно:
- почему результат
dis.call(5)являетсяNumberс каким-либо свойством a[[PrimitiveValue]], но результатыfive++иfive * 5кажутся просто равными числами5и25(неNumbers) - почему свойство
five.wtfисчезает после приращенияfive++ - почему свойство
five.wtfбольше не устанавливается после приращенияfive++, несмотря на то, что назначениеfive.wtf = 'potato?', по-видимому, устанавливает значение.
