鉴于JavaScript已经closures,这个关键字的目的究竟是什么?

给定以下代码,我们可以看到闭包有助于在其范围内包含variables的值:

var f = new Foo('jim','jam'); var b = new Bar('saul','paul'); var bz = new Baz(); function Foo(jim,jam){ this.jim = jim; this.jam = jam; function log(){ console.log('jim:',jim,'jam:',jam); } return log; } function Bar(jim,jam){ function log(){ console.log('jim:',jim,'jam:',jam); } return log; } function Baz(jim,jam){ this.jim = 'bark'; this.jam = 'catch'; function log(){ console.log('jim:',this.jim,'jam:',this.jam); } return log; } f(); b(); bz(); 

那么,JavaScript中“ thisthis关键字的用途究竟是什么呢? 什么时候有必要?

该关键字用于访问当前的上下文,与当前的作用域不一样。

如果你调用一个对象的方法,那个调用的上下文就是对象。 您可以使用this关键字来访问对象中的属性:

 function Foo(jim,jam){ this.x = jim; this.y = jam; } Foo.prototype.log = function(){ document.write('jim:' + this.x + ', jam:' + this.y); }; var f = new Foo('jim','jam'); f.log(); 

当必须显式引用上下文对象时, this关键字是必需的。 你的函数并不是很好的例子,因为你已经为函数参数使用了相同的对象属性名称。 如果你让他们不同,可能会更清楚:

 function Foo(pjim, pjam){ this.jim = pjim; this.jam = pjam; function log(){ console.log('jim:',jim,'jam:',jam); } return log; } 

该版本将基本上不起作用 – 名称“吉姆”和“果酱”将不会对应于logfunction中的任何东西。