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++
时,每次调用carcarlike
函数时,都会创建一个新的闭包范围,因此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-有什么东西可以回答您的问题,或者如果您有自己的答案,请发布它,以便其他人可以从中受益。。