Круглые скобки в IIFE в JavaScript

Обычно при вызове функции на месте вместо плюса используются круглые скобки, так как такой способ оформления считается более очевидным:

javascript(function() {
  console.log('!');
}());

Чаще всего круглые скобки вызова функции ставят снаружи, вот так:

javascript(function() {
  console.log('!');
})();
Задание 1

Определите, не запуская код, что выведется в консоль:

javascriptlet result = (function() {
  return '!';
}());

console.log(result);
Задание 2

Определите, не запуская код, что выведется в консоль:

javascriptlet result = (function() {
  return '!';
})();

console.log(result);
Задание 3

Определите, не запуская код, что выведется в консоль:

javascriptlet result = (function() {
  return '!';
});

console.log(result);
Задание 4

Определите, не запуская код, что выведется в консоль:

javascriptlet result = (function() {
  return '!';
});

console.log(result());