是否可以在JS中加载具有相同变量/函数的多个脚本,而不会覆盖变量的旧值。例如,为每个加载的脚本创建自己的范围/沙箱或对象。
要加载的文件:
SCRIPT1:
<script>
function init() {
do something...
}
</script>
SCRIPT2:
<script>
function init() {
do something...
}
</script>
在加载调用script1.init()或script2.init()之后,这可能吗?
答案 0 :(得分:3)
您可以使用自调用匿名函数来包装每个代码段,这将有效地命名该段。
(function() {
function init() {
// do something...
}
})();
init(); // ReferenceError
但是,如果您无法更改代码,则第二个init
将覆盖第一个定义。
...然而
在加载调用script1.init()或script2.init()之后,这可能吗?
......令人困惑。您是否已将init()
作为对象的方法?如果是这样,他们就不会互相覆盖。
答案 1 :(得分:1)
不幸的是,没有。单个页面上只有一个全局范围。
但是,通过使用类似模块模式的东西,你可以创建一个虚假的命名空间:
例如:
var script1 = (function() {
var that = {};
that.init = function() {
do something...
};
more functions...
return that;
})();
然后使用script1.init()调用它;
您可以找到有关模块模式here的更多信息。