这个评估条件的目的是什么
What is the purpose of this eval conditional?
我正在浏览源代码: http://js-dos.com/games/doom2.exe.html 并注意到一些事情:
if (typeof Module === 'undefined')
{
Module = eval('(function() {try { return Module || {} } catch(e) { return {} }})()');
}
- 模块函数使用内联脚本标记定义
- 稍后在另一个内联标记中再次声明
var
,这次它会检查模块是否存在。
我的问题:如果它只会尝试再次返回模块,那么使用自调用函数声明模块有什么意义?不是已经证明它不存在了吗?为什么不直接显式声明模块为{}
?
如果模块是恰好包含undefined
的局部变量,则typeof Module
可能未定义。此代码旨在支持几种情况,模块可能是本地的或全局的,以及已定义或未定义的。我们希望避免污染全局范围,因此我们不只是在未定义的情况下Module = ...
。
首先,通常的情况是在全局范围内由 emscripten 生成的代码。在这种情况下,模块可能会或可能不会定义,并且可能是本地的,但仍然undefined
,因此我们需要同时处理两者。
其次,emscripten代码可能只是一个模块,就像使用弹药.js的游戏一样。在这种情况下,用法是
function Ammo(Module) {
// emscripten-generated code, uses the Module
return something;
}
所以在这种情况下,模块是一个局部函数,作为已经为我们定义的参数给出。
我们不能只声明var Module
因为这意味着模块是一个局部变量。所以我们需要评估。对于 eval,我们需要一个返回值的函数,因为我们需要一个 try-catch。try-catch 使用 Module,如果 Module 不是本地的(无论它是否包含 undefined
),就会抛出,这正是我们想要的。
不过,这段代码可能会被简化!
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 在canjs中,根据任何模型实例的存在,有条件地显示胡子模板部分的最常用方法是什么
- 在 JavaScript 中,条件语句中 OR 运算符的正确语法是什么?我错过了什么
- 这个Javascript条件检查是什么
- 在多个条件 if 语句中什么条件是假的
- 这个评估条件的目的是什么
- 我的 JavaScript 需要什么条件?它是一个弹出一个对话框的脚本,其中包含字段的表单验证备注留空
- 使用javascript从输入文本中检查值的条件是什么
- 在Javascript中,在什么条件下只在构造函数中使用“this”是合适的
- 这个 JavaScript for loop 有什么问题?是定义条件的第二条语句吗?
- 页面根上的位置.hash的条件是什么
- OR和and条件没有按预期返回-实现它的最佳方法是什么?
- 在JavaScript中,通过条件语句更改css的正确语法是什么?
- ""的正确语法是什么;OR";内部条件";IF"
- 对于可能不满足结束条件的while循环,最佳实践是什么
- 显示条件确认消息的最佳做法是什么,然后继续
- 自动插入分号的条件是什么
- 成为一个真数组的条件是什么?