考虑到JavaScript有闭包,这个关键字的确切用途是什么?
给定以下代码,我们可以看到闭包有助于在其作用域内包含变量的值:考虑到JavaScript有闭包,这个关键字的确切用途是什么?,javascript,node.js,Javascript,Node.js,给定以下代码,我们可以看到闭包有助于在其作用域内包含变量的值: 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); }
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中“
this
”关键字的确切用途是什么呢?什么时候需要?当必须显式引用上下文对象时,此
关键字是必需的。您的函数不是很好的示例,因为您对对象属性使用的名称与对函数参数使用的名称相同。如果你让他们与众不同,可能会更清楚:
function Foo(pjim, pjam){
this.jim = pjim;
this.jam = pjam;
function log(){
console.log('jim:',jim,'jam:',jam);
}
return log;
}
该版本基本上不起作用-名称“jim”和“jam”与
log
函数中的任何内容都不对应。当必须显式引用上下文对象时,必须使用此
关键字。您的函数不是很好的示例,因为您对对象属性使用的名称与对函数参数使用的名称相同。如果你让他们与众不同,可能会更清楚:
function Foo(pjim, pjam){
this.jim = pjim;
this.jam = pjam;
function log(){
console.log('jim:',jim,'jam:',jam);
}
return log;
}
该版本基本上不起作用-名称“jim”和“jam”与
log
函数中的任何内容都不对应。此关键字用于访问与当前范围不同的当前上下文
如果调用对象的方法,则该调用的上下文就是对象。您可以使用this
关键字访问对象中的属性:
函数Foo(jim,jam){
这个.x=吉姆;
这个。y=果酱;
}
Foo.prototype.log=函数(){
document.write('jim:'+this.x+',jam:'+this.y);
};
var f=新Foo('jim','jam');
f、 log()
此关键字用于访问与当前范围不同的当前上下文
如果调用对象的方法,则该调用的上下文就是对象。您可以使用this
关键字访问对象中的属性:
函数Foo(jim,jam){
这个.x=吉姆;
这个。y=果酱;
}
Foo.prototype.log=函数(){
document.write('jim:'+this.x+',jam:'+this.y);
};
var f=新Foo('jim','jam');
f、 log()
this
关键字允许您将变量传递到函数的作用域中,而不将其作为函数中的参数。所以,如果我试图引用工厂中的窗口,而窗口不可用,我可以调用我的函数,比如myClass['myfunction']代码>像这样有效地传递窗口。很难说到底是什么让你困惑。局部变量作用域和闭包以及对象上下文之间确实没有太多的共同点。@有点重叠的是,通过从外部函数返回内部函数,您可以像引用实例一样引用这些变量variables@AlexMills代码引用的是参数,而不是对象属性。JavaScript从来没有隐式对象引用(除了在带有
语句块的中,这些语句块已被弃用且怪异)。通过this
关键字,可以将变量传递到函数的作用域中,而不必将其作为函数中的参数。所以,如果我试图引用工厂中的窗口,而窗口不可用,我可以调用我的函数,比如myClass['myfunction']代码>像这样有效地传递窗口。很难说到底是什么让你困惑。局部变量作用域和闭包以及对象上下文之间确实没有太多的共同点。@有点重叠的是,通过从外部函数返回内部函数,您可以像引用实例一样引用这些变量variables@AlexMills代码引用的是参数,而不是对象属性。JavaScript从来没有隐式对象引用(除了在带有语句块的中,这些语句块不推荐使用,而且很奇怪)。