我对javascript有一个很奇怪的问题。如果采用以下代码并运行它,它将正常运行而不会出现任何错误,但是如果注释第一个alert,它将在第5行(var _board = Bomber.BoardFactory.getBoard();)处引发错误,表明BoardFactory不存在(请记住,发出第一个警报时,一切都在正常运行)。我已经能够使用Firefox和Chrome重现此确切行为。

Bomber = {};

Bomber.Game = function () {
    var self = {};
    var _board = Bomber.BoardFactory.getBoard();

    self.init = function () {};
    self.start = function () {};

    return self;
}

alert("2");

(function () {
    var instance;

    Bomber.BoardFactory = {};
    Bomber.BoardFactory.getBoard = function () {
        if (!instance)
            instance = new Bomber.Board();
        return instance;
    };
})();

alert("3");

Bomber.Board = function () {
    var self = {};
    return self;
}

$(document).ready(function () {
    var game = Bomber.Game();
    game.init();
    game.start();
});


我的问题是,什么可能导致这种奇怪的行为?警报调用到底如何识别Bomber.BoardFactory

最佳答案

我通过jslint运行它,修复了错误(如果if缺少2个分号和{})

现在看来可行

Bomber = {};

Bomber.Game = function () {
    var self = {};
    var _board = Bomber.BoardFactory.getBoard();

    self.init = function () {};
    self.start = function () {};

    return self;
};

//alert("2");

(function () {
    var instance;

    Bomber.BoardFactory = {};
    Bomber.BoardFactory.getBoard = function () {
        if (!instance){
            instance = new Bomber.Board();
        }
        return instance;
    };
})();

//alert("3");

Bomber.Board = function () {
    var self = {};
    return self;
};

$(document).ready(function () {
    var game = Bomber.Game();
    game.init();
    game.start();
});


发生的情况是,在定义Bomber.Game后您错过了最后一个分号,因此下一个是(function().... etc,因此它认为您正在调用该函数。

如果您有警报,则将通过自动分号将其保存。

08-08 07:37