0 — число. При взятии у него свойства оно преобразовавыется в объект. У объекта есть функция-конструктор. У конструктора есть свой конструктор —
Function
.
Получаем
(
Function(
(Function ('return unescape'))()('al%65rt%28%22Hello%20World%21%22%29')
)
)();
Уже ближе.
(Function ('return unescape'))()
создает функцию и сразу же её выполняет. Результатом будет функция
unescape
, определенная в глобальном скопе.
(
Function(
unescape('al%65rt%28%22Hello%20World%21%22%29')
)
)();
ну, и
(Function('alert("Hello World!")'))();
Т.е., опять-таки, функция объявляется и сразу запускается.
alert("Hello World!")