Paréntesis en IIFE en JavaScript

Normalmente, al invocar una función inmediatamente, en lugar de un signo más, se utilizan paréntesis, ya que esta forma de escritura se considera más obvia:

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

La mayoría de las veces, los paréntesis de invocación de la función se colocan en el exterior, así:

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

Determine, sin ejecutar el código, qué se mostrará en la consola:

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

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

Determine, sin ejecutar el código, qué se mostrará en la consola:

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

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

Determine, sin ejecutar el código, qué se mostrará en la consola:

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

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

Determine, sin ejecutar el código, qué se mostrará en la consola:

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

console.log(result());