关于这一点和javascript中的self

关于这一点和javascript中的self,javascript,node.js,closures,Javascript,Node.js,Closures,我知道“自我”的魔力。但是看看nodejs的这个片段(不完整) 我的理解是,我们必须使用self来创建一个闭包。这里这些行中没有闭包,但作者在将其分配给self之后使用了这两个闭包。这里有什么区别吗?在这个特定代码示例中,没有理由使用self变量,因为没有其他函数作用域可能需要访问this的原始值 一些开发人员有一个一致的方法或约定来创建一个局部变量,比如self,并将this的值赋给它,以便在需要时在闭包中使用它。self变量也可以最小化为小于this,因为它可以重命名为一个字符的变量名,但是

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


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

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

一些开发人员有一个一致的方法或约定来创建一个局部变量,比如
self
,并将
this
的值赋给它,以便在需要时在闭包中使用它。
self
变量也可以最小化为小于
this
,因为它可以重命名为一个字符的变量名,但是
this
不能重命名

在任何情况下,如果删除了
self
,并且在此特定方法中仅使用了
,则此处的功能不会受到影响


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

我假设使用它只是因为习惯和与代码其余部分的统一。在一个地方使用
this
可能只是一个疏忽。因为
self
设置为
this
,所以它们是相同的变量。我不知道作者为什么要把这两者混为一谈。代码不完整。此函数中有闭包。我只是没贴出来。因此,创建self是有意义的。@AlvinCao-如果此方法中定义了匿名回调函数,并且这些回调函数希望访问
this
的原始值,是的,这是一种常见的设计模式,用于将
this
的值分配给一个局部变量,该局部变量通常被称为
self
that
me
,以便当
this
在回调函数中具有不同的值时,可以在回调函数中使用该局部变量来引用宿主对象函数。谢谢你,@jfriend00。但我恐怕不是在问使用自变量的惯例。我知道为什么。我在问,在这种非闭包代码中,作者为什么同时使用这两个词。我怀疑作者是否遵守任何惯例以使代码更清晰,因为我多次看到类似的代码。@AlvinCao-当不需要
self
时,在方法的部分使用
this
,而在方法的其他部分使用
self
是不一致的,通常是不好的做法。如果您要使用
self
,那么请在任何地方使用它,或者仅在闭包中需要时使用它,而不是有时使用,但不要在其他情况下使用。这是不一致的,使代码混乱,使代码的读者想知道发生了什么(当什么都没有发生时)。
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;
......
}