var that = this,self = this等

时间:2012-09-25 13:57:58

标签: javascript scope nested this

以这种方式分配变量的目的是在存在嵌套作用域时提供对父作用域内活动对象的访问。我认为这种形式很差;为什么不为父目标对象提供更有意义的变量名?

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

要在外部作用域中创建活动目标div的挂钩,我通常会看到:

var that = this;

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

有可能通过质疑这种技术使自己变得愚蠢,为什么没有更有意义的东西,比如

var outerDiv = this;

您怎么看?

3 个答案:

答案 0 :(得分:3)

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

function Constructor() {
    var that = this;

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

所以...使用在这种情况下最清楚的东西。

答案 1 :(得分:1)

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

人们使用约定,因为他们可以立即将其识别为代表一种常见场景,就像其他人阅读代码一样。

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


FWIW,self是对浏览器中全局上下文的引用,因此通过执行self,某些人使用最近的外部上下文隐藏self = this变量是有意义的。

答案 2 :(得分:0)

我大多是这样做的

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

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

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

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