0

我从一个特定的游戏制作应用程序中得到了一些机器生成的 Javascript,它不能很好地与闭包配合使用。我试过像这样包装整个东西:

var gameInstance = (function() {

    // Some code that defines stuff

    return {
        initGame: function() {
            _VD1();
        }
     }
})()

我正在寻找一种方法来防止它泄漏到全局命名空间中并能够在之后清理整个游戏。这种特殊类型的闭包似乎仍然会导致数十个函数的泄漏。它隐藏了一些东西,比如_VD1电话——但其他东西仍然设法泄漏。我可以注意/做些什么来防止这种情况发生?

4

3 回答 3

3

听起来您正在使用的代码在不使用var关键字的情况下声明了很多变量。

您可以通过它并使用使用变量var的最外层函数范围顶部的关键字声明所有变量。

如果您根本无法修改其他脚本,除了确保您自己的所有脚本都正确命名空间之外,您无能为力,这样它们就不会受到脚本声明的所有全局变量的干扰/修改。

于 2013-06-03T16:24:17.590 回答
0

听起来您正在尝试保留一些 javascript 沙盒,可以使用 iframe 来实现此目的。这是未经测试的,但可以作为灵感;

var sb = document.createElement('iframe');
document.body.appendChild(sb);
sb.document.write('
<html>
<head></head>
<body>
<script>
gameInstance = (function() {

    // Some code that defines stuff

    return {
        initGame: function() {
            _VD1();
        }
     }
})()

</script>
</body>
</html>');

var gameInstance = sb.gameInstance;
于 2013-06-03T16:29:41.743 回答
0

也许http://jqueryboilerplate.com/给你一个灵感

// the semi-colon before function invocation is a safety net against concatenated
// scripts and/or other plugins which may not be closed properly.
;(function ( $, window, document, undefined ) {

})( jQuery, window, document );
于 2013-06-03T16:45:35.947 回答