Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个和那个有什么区别_Javascript - Fatal编程技术网

Javascript 这个和那个有什么区别

Javascript 这个和那个有什么区别,javascript,Javascript,我想知道和理解这个和那个之间的区别,以及何时我必须使用它。 我准备了很多文章和教程,但我还不明白 这是我的课 function Container(param) { function dec() { if (secret > 0) { secret -= 1; return true; } else { return false; } } th

我想知道和理解这个和那个之间的区别,以及何时我必须使用它。 我准备了很多文章和教程,但我还不明白

这是我的课

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;
    };
}
新的

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


为什么我必须执行
var that=this

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

没有特殊意义。它只是一个已经赋值的变量

在这种特殊情况下,
被分配
容器
运行时具有的值,并在
服务
功能中使用(但仍具有调用
容器
的上下文值。由于
服务
是一个不同的函数,因此其
this
的值可能不同



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

您是否在没有
that
的情况下尝试过它以查看发生了什么?可能是个好方法了解发生了什么的方法。我不认为在您的示例中需要
那样的
。请尝试
var s=myContainer.service;s()
看看有/没有
这个
会发生什么。@CoderDennis是的,它可以解决类似的问题-但是为什么我必须做var=this;?@monkeyUser:你不必。如果你不想-你可以不定义
那个
变量。@monkeyUser-否则
那个
就没有值了。你有明确的exa吗什么?
var myContainer = new Container('foo');
myContainer.service()