javascript - 关于这个和 javascript 中的 self

标签 javascript node.js closures

我知道“ self ”的魔力。但是看看来自 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 后使用了两者。这有什么区别吗?

最佳答案

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

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

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

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

关于javascript - 关于这个和 javascript 中的 self ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16074990/

相关文章:

swift - 在采用转义闭包的函数中抛出错误

JavaScript 异步函数

javascript - 使用 JS 为当前用户设置 peoplepicker 默认值

javascript - Winjs中的setTimeout

javascript - passport.js 没有将用户传递给 session

node.js - 我们将验证逻辑放在 NodeJs MVC 中的哪里?

node.js - socketio中 `socket.broadcast.to(param)`的用途是什么

javascript - 通过 Google API OAuth2 对用户进行身份验证以使用 Chrome 扩展程序

c# - 有没有办法让 C# 不提示实际上没有未初始化的未初始化变量?

generics - 闭包作为 Rust 结构中的一种类型