加载具有相同变量/函数的多个脚本

时间:2011-08-01 12:22:24

标签: javascript function

是否可以在JS中加载具有相同变量/函数的多个脚本,而不会覆盖变量的旧值。例如,为每个加载的脚本创建自己的范围/沙箱或对象。

要加载的文件:

SCRIPT1:

<script>
function init() {
    do something...
}
</script>

SCRIPT2:

<script>
function init() {
    do something...
}
</script>

在加载调用script1.init()或script2.init()之后,这可能吗?

2 个答案:

答案 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的更多信息。