4

我知道“自我”的魔力。但是看看 nodejs 的这个片段(不完整)。

Socket.prototype.connect = function(options, cb) {
......
  var self = this;
  var pipe = !!options.path;

  if (this.destroyed || !this._handle) {
    this._handle = pipe ? createPipe() : createTCP();
    initSocketHandle(this);
  }

  if (typeof cb === 'function') {
    self.once('connect', cb);
  }

  timers.active(this);

  self._connecting = true;
  self.writable = true;
......
}

我的理解是我们必须使用 self 来创建一个闭包。这些行中没有闭包,但作者在将其分配给 self 后使用了这两个闭包。这里有什么不同吗?

4

1 回答 1

3

在您在这个特定代码示例中显示的内容中,甚至没有理由拥有self变量,因为没有其他函数范围可能需要访问this.

一些开发人员有一致的方法或约定来创建一个局部变量,例如self并为其分配值thisjust 以便他们可以在需要时在闭包中使用它。该self变量也可以最小化,this因为它可以重命名为一个字符的变量名称,但this不能重命名。

self在任何情况下,这里的功能如果被删除并且只this用于这个特定的方法,就不会受到影响。

我自己的个人约定是仅定义self是否确实需要它,这与我用于其他局部变量的逻辑相同,然后我只在需要它的闭包内使用它。

于 2013-04-18T05:34:22.483 回答