这个和那个有啥区别[重复]

Posted

技术标签:

【中文标题】这个和那个有啥区别[重复]【英文标题】:What difference between This and That [duplicate]这个和那个有什么区别[重复] 【发布时间】:2014-05-28 23:53:54 【问题描述】:

我想知道和理解 this 和 that 之间的区别,以及何时必须使用它。 我准备了很多帖子和很多教程,但我还不明白

这是我的课

function Container(param) 

    function dec() 
        if (secret > 0) 
            secret -= 1;
            return true;
         else 
            return false;
        
    

    this.member = param;
    var secret = 3;
    var that = this;

    this.service = function () 
        console.log(this.member); // foo
        console.log(that.member); // foo
        return dec() ? that.member : null;
    ;

新的

var myContainer = new Container('foo');
myContainer.service()

调用myContainer.service() 将在前三次调用时返回“abc”。 之后,它将返回 null

为什么我必须这样做var that = this ??

【问题讨论】:

还有***.com/questions/3127429/javascript-this-keyword 你试过没有that看看会发生什么?可能是了解正在发生的事情的好方法。 在您的示例中,我看不到 that 的需要。试试var s = myContainer.service; s(),看看有/没有that会发生什么。 @CoderDennis 是的,它可以工作 类似问题 - self=this 和 difference between self and this 【参考方案1】:

this 是一个变量,用于获取当前函数的上下文(取决于它的调用方式)。

that 没有特殊含义。它只是一个被赋值的变量。

在这种特殊情况下,that 被分配了 thisContainer 运行时所具有的值,并在 service 函数中使用(但仍然具有作为调用上下文的值到Container。由于service是一个不同的函数,它的this的值可能不同。


通常,对于这种特殊的函数设计,Container 将作为构造函数调用(所以this 将是Container 的实例对象)然后service 将在该实例对象的上下文中调用,因此您可以使用this 而不是通过that 传递值。我不知道为什么该代码的作者在这里选择使用that

【讨论】:

但为什么我必须做 var that = this; ? javascript.crockford.com/private.html @monkeyUser:你不必必须。如果你不想要 - 你可以不定义 that 变量。 @monkeyUser — 否则 that 根本没有值。 你有明确的例子吗?

以上是关于这个和那个有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

CoffeeScript,=> 和 -> 有啥区别 [重复]

枚举和单例类有啥区别[重复]

python视角中的参数和参数有啥区别[不重复:)]? [复制]

链表是啥!那个编程语言中有的,和数组有啥区别

SQL 中的 UNION 和UNION ALL 有啥区别?

Mathematica和matlab有啥区别,那个更简单阿?