Ответ 1
Вы забыли ;
после окна onload
выражение функции. Так оно и делается:
window.onload = function () {
console.log('loaded');
}(function() { console.log('1'); }())
Итак, функция onload
немедленно выполняется с одним параметром, который является результатом другого IEFE. Следовательно,
function() { console.log('1'); }()
выполняется сначала, а сразу после этого выражение функции window.onload
. Тогда выражение console.log('2')
.
Отличный пример, почему важно не забывать точки с запятой в конце строк.