关于这和javascript的自我

时间:2013-04-18 05:16:18

标签: javascript node.js closures

我知道“自我”的魔力。但是请看一下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之后使用了两者。这有什么不同吗?

1 个答案:

答案 0 :(得分:3)

在您在此特定代码示例中显示的内容中,没有理由拥有self变量,因为没有其他函数作用域可能需要访问this的原始值

一些开发人员拥有一致的方法或约定来创建像self这样的局部变量,并为其分配this的值,以便他们可以在闭包中使用它(如果需要)。 self变量也可以小于this,因为它可以重命名为单字符变量名,但this无法重命名。

在任何情况下,如果self被移除且此特定方法仅使用this,则此处的功能不会受到影响。

我个人的约定是只定义self,如果实际需要它,这与我用于其他局部变量的逻辑相同,然后我只在需要它的闭包中使用它。