-2

以这种方式分配变量的目的是在存在嵌套范围时提供对父范围内活动对象的访问。我认为这是相当糟糕的形式;为什么不为父目标对象提供一个更有意义的变量名呢?

例如,如果我们选择页面中的所有 div,并遍历它们。在每个 div 中,我们选择目标 div 中的所有锚链接,在嵌套循环中迭代这些锚链接。在此示例中,外部范围的“this”是当前目标 div,内部范围的“this”将是当前目标锚链接。

要在外部范围内创建一个挂钩到活动目标 div,我通常会看到:

var that = this;

即使在 Crockford 的 Good-Parts 书中,他也使用了这个作业。

冒着质疑这种技术而自欺欺人的风险,为什么不做一些更有意义的事情,比如

var outerDiv = this;

你怎么看?

4

3 回答 3

3

这很好,但是您谈论this成为迭代变量的方式听起来就像您正在使用 jQuery。它并不总是一个元素,有时that是最有意义的:

function Constructor() {
    var that = this;

    this.eventListenerThatWillBeBound = function() {
        // Do something with that
    };
}

所以......使用任何情况下最清楚的东西。

于 2012-09-25T14:01:27.590 回答
1

我认为您应该以对您有意义的方式命名变量。

人们使用约定是因为他们可以立即将其识别为代表一个常见场景,其他阅读代码的人也可以。

如果您不喜欢传统的做事方式,请按照自己的方式做,但要确保您的变量对阅读您的代码的其他人有意义。


FWIWself是对浏览器中全局上下文的引用,因此对于某些人来说self,通过self = this.

于 2012-09-25T14:01:57.063 回答
0

我大多这样做

function() {
  // use 'this' as it is 
}.bind(this)

或者我从外部调用具有范围的闭包

closure.call(this); // the scope inside the closure is now 'this' too

那时我不需要有趣的名字。

于 2012-09-25T14:00:15.033 回答