假设我有一个名为
module.js
是这样的:
a=1;
默认情况下,这会附加到
window
污染
global
(实际上
窗
)在浏览器中执行时的范围。
我是否可以在不更改源代码内容的情况下将其附加到其他对象?
由于唯一真正的问题是执行上下文而不是其他问题,理想的解决方案应该是这样的:
change execution context from window to module object;
execute the code;
change execution context from module to window object;
如果这是不可能的,那么在源代码中添加包装器(如IIFE)就可以了,只要内部内容没有更改。更改内部内容需要对代码进行全面扫描,这很昂贵。
例如,我可以将其包装成这样的函数():
function module()
{
a=1;
}
如果严格执行,我可以避免全球范围的污染。然而,我拿不到这个物体。
我不想做这样的事情:
module = function module()
{
return a=1;
}
因为我们需要添加
return
只要有赋值,就意味着扫描整个代码。
我只是想找到一些方法来改进传统的浏览器代码,而只需付出最小的努力。