Ответ 1
typeof Module
может быть undefined, если Module является локальной переменной, которая содержит undefined
. Этот код предназначен для поддержки нескольких случаев, модуль может быть локальным или глобальным и определен или undefined. Мы хотим избежать загрязнения глобальной области, поэтому мы не просто делаем Module = ...
, если он undefined.
Во-первых, обычный случай - это код, генерируемый emscripten, в глобальной области. В этом случае модуль может или не может быть определен и может быть локальным, но все еще undefined
, поэтому нам нужно обрабатывать оба.
Во-вторых, код emscripten может быть просто модулем, как игра, в которой используется ammo.js. В этом случае использование
function Ammo(Module) {
// emscripten-generated code, uses the Module
return something;
}
поэтому модуль в этом случае является локальной, заданной как параметр, уже определенный для нас.
Мы не можем просто объявить var Module
, потому что это означает, что модуль является локальной переменной. Так что нам нужно eval. Для eval нам нужна функция, которая возвращает значение, потому что нам нужен try-catch. Try-catch использует Module и будет вызывать, если модуль не является локальным (независимо от того, содержит ли он undefined
или нет), что именно мы хотим.
Возможно, этот код можно было бы упростить!