Использование анонимной функции, которая вызывается немедленно, как в вашем примере, часто делается с единственной целью изолировать область вашего кода.В этом случае, в частности, использование "use strict"
ограничивает строгий режим только кодом внутри функции верхнего уровня.
Как вы сказали, у вас может быть просто функция вместо двух, но результатне то же самое:
const sum = (function() {
"use strict";
var x = something(); // strict mode enforced here
return function sum(...args) {
return args.reduce((a, b) => a + b, 0);
};
})();
И здесь:
var x = something(); // strict mode not enforced here
function sum() {
"use strict";
return arguments.reduce((a, b) => a + b, 0);
};
Кроме того, хотя во втором подходе функция обязательно должна быть объявлена в глобальной области видимости, в первом подходе выможет иметь много функций, объявленных внутри функции верхнего уровня без загрязнения глобальной области видимости.