我知道“自我”的魔力。但是请看一下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之后使用了两者。这有什么不同吗?
答案 0 :(得分:3)
在您在此特定代码示例中显示的内容中,没有理由拥有self
变量,因为没有其他函数作用域可能需要访问this
的原始值
一些开发人员拥有一致的方法或约定来创建像self
这样的局部变量,并为其分配this
的值,以便他们可以在闭包中使用它(如果需要)。 self
变量也可以小于this
,因为它可以重命名为单字符变量名,但this
无法重命名。
在任何情况下,如果self
被移除且此特定方法仅使用this
,则此处的功能不会受到影响。
我个人的约定是只定义self
,如果实际需要它,这与我用于其他局部变量的逻辑相同,然后我只在需要它的闭包中使用它。