我了解到self一词在javascript中没有特殊含义。在代码下面,虽然如果写成var Life = function(....),很明显,但作者决定执行var _ = self.Life = function(...)。虽然我了解var _部分(以便在内部使用较短的名称来指代相同的东西),但我没有得到self.Life(而不是Life)。有人可以解释一下吗?

(function() {
    var _ = self.Life = function(seed) {
        this.seed = seed;
        this.height = seed.length;
        this.width = seed[0].length;
        this.prevBoard = [];
        this.board = cloneArray(seed);
    };
    _.prototype = {
        next: function() {
            //
        },
        toString: function() {
            return this.board.map(function(row) {
                return row.join(' ');
            }).join('\n');
        }
    };

    function cloneArray(array) {
        return array.slice().map(function(row) {
            return row.slice();
        });
    }
})();
undefined
var game = new Life([
    [0, 0, 0, 0],
    [0, 0, 1, 0],
    [0, 1, 0, 1]
]);
undefined
console.log(game + ' ');

最佳答案



不,但是它是predefined global on browsers,引用当前窗口(就像window确实*)。所以

var _ = self.Life = function...

...正在使Life成为全局性的,而不会成为The Horror of Implicit Globals **的牺牲品。

现场简要示例:

(function() {
  var _ = self.Life = function() {
    console.log("Hi there");
  };
  new _();
})();
new Life();



* windowself以前对当前窗口的引用略有不同,但是在现代浏览器中,window === selftrue,是windowself的默认值。

**(这是我贫乏的小博客上的帖子)

关于javascript - javascript改用新名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46131011/

10-16 23:22