rai*_*gun 11 javascript eval conditional-statements emscripten
我在这里浏览源代码:http://js-dos.com/games/doom2.exe.html并注意到一些事情:
if (typeof Module === 'undefined')
{
Module = eval('(function() {try { return Module || {} } catch(e) { return {} }})()');
}
Run Code Online (Sandbox Code Playgroud)
var在另一个内联标记中再次声明它,这次它检查模块是否存在.我的问题:如果只尝试再次返回模块,那么使用自调用函数声明Module有什么意义呢?是不是已经证明它不存在?为什么不直接将Module声明为{}?
小智 5
typeof Module如果Module是恰好包含的局部变量,则可能未定义undefined.此代码旨在支持少数情况,Module可能是本地的或全局的,并且已定义或未定义.我们希望避免污染全局范围,因此我们不会只是做Module = ...它未定义的事情.
首先,通常的情况是全局范围内的emscripten生成的代码.在这种情况下,模块可能会或可能不会被定义,并且可能是本地的但仍然是undefined,所以我们需要处理这两者.
其次,emscripten代码可能只是一个模块,就像使用ammo.js的游戏一样.在那种情况下,用法是
function Ammo(Module) {
// emscripten-generated code, uses the Module
return something;
}
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,模块是一个本地函数,作为已经为我们定义的参数给出.
我们不能只声明,var Module因为这意味着Module是一个局部变量.所以我们需要eval.对于eval,我们需要一个返回值的函数,因为我们需要一个try-catch.try-catch使用Module,如果Module不是本地的(不管它是否包含undefined),它将抛出,这正是我们想要的.
但是,这个代码可能会被简化!
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |