В моей функции возможна асинхронность и изолированность (при желании).
Немного об изолированности. Скажем, у нас есть некая библиотека, написанная сторонним разработчиком, и которая использует объект window, но, на самом деле, в нем не нуждается:
// lib.js
window.method1 = function() { /*1*/ };
window.method2 = function() { /*2*/ };
В таком случае можно заменить window на собственный объект, который служит пространством имен:
var lib = {};
require( 'lib.js', function() {
console.log( window.method1, window.method2 ); //undefined undefined
console.log( lib.method1, lib.method2 ); //function() { /*1*/ } function() { /*2*/ }
}, { window: lib } );
Еще раз повторюсь, функция выложена в ознакомительных целях и просто-напросто показывает, что в JS можно сделать «еще и так».