Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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,在中使用obj.loc++而不是this.loc++有什么好处 第四行 var carlike = function(obj, loc) { obj.loc = loc; obj.move = function() { this.loc++; }; return obj; }; var amy = carlike({}, 1); amy.move(); 这段视频有一些解释,但我仍然不清楚这两者之间的区别 在本视频中,有人说,当我们使用this.

在中使用
obj.loc++
而不是
this.loc++
有什么好处 第四行

var carlike = function(obj, loc) {
    obj.loc = loc;
    obj.move = function() {
        this.loc++;
    };
    return obj;
};

var amy = carlike({}, 1);
amy.move();
这段视频有一些解释,但我仍然不清楚这两者之间的区别


在本视频中,有人说,当我们使用
this.loc++
时,每次调用
move
时,它都会绑定到一个新值。但是当我们使用
obj.loc++
时,每次调用car
carlike
函数时,都会创建一个新的闭包范围,因此
obj
变量始终只引用一个car对象。这是什么意思?

如果您使用
,则在调用它时设置其值:

amy.move();//调用此===amy
艾米。移动。呼叫(foo);//使用此===foo调用

如果您使用
obj
,它将始终是
obj
,与调用
move
的方式无关。

这是Udacity面向对象JavaScript课程中的视频。在讲师教我们有关
这个
关键字之前,我们要上一些课

引用函数/方法的对象/调用方。通常是
左侧的
对象
。(在@Oriol
的回答中,此
在特殊的
调用
函数中作为参数被覆盖。)


这就是真正的区别,@Oriol是正确的。

首先,您正确地理解了,无论您使用
this.loc
还是
obj.loc
,结果都没有区别

对您的问题的简短回答是,使用
obj.loc++
而不是
this.loc++
没有真正的直接优势或劣势

说明:您应该在两个重要的上下文中理解
这一点

  • 全局上下文:在全局执行上下文中(在任何函数之外),它指的是全局对象,无论是否处于严格模式。既然这不是你的案子,那我们就别挖了
  • 函数上下文:在函数内部,其值取决于函数的调用方式。在非严格模式下,该值必须始终为对象,因此默认为全局对象。在严格模式下,该值保持在进入执行上下文时设置的任何值。如果没有定义,它将保持未定义状态。它也可以设置为任何值,如null或42或“我不是这个”
  • 请阅读以获得更详细的解释

    现在,在您的情况下,无论您是在严格模式还是非严格模式下运行,无论您是使用
    this
    还是
    obj
    都会看到相同的结果,因为当您使用
    this
    时,它再次成为您的函数上下文,您可以访问
    this
    上的
    loc

    现在,说到约定,假设有另一个名为
    loc
    的全局变量,当您使用
    this.loc++
    carlike
    函数中,然后仍然
    将在函数上下文中运行,并将增加
    carlike
    函数的
    loc
    ,但可读性较差,至少对于新手来说,它将增加全局
    loc
    还是本地
    loc


    所以,
    obj.loc++来总结
    是一个更好的主意。

    FYA-有什么东西可以回答您的问题,或者如果您有自己的答案,请发布它,以便其他人可以从中受益。。