Phi*_*ski -1 javascript scope function this
我很好奇何时需要/最佳实践使用关键字this。我知道this在确定函数this值时会使用它,但它总是需要吗?
我问的原因是因为我有一个内部函数,它在我的模块中调用,它真正做的就是对您传递给它的一些数据进行排序。我的问题是我应该使用关键字调用这个函数this还是单独调用这个函数。
例如:
function formatSomeData(data){
//code........
}
this.formatSomeData(data);
OR
formatSomeData(data);
Run Code Online (Sandbox Code Playgroud)
我知道调用函数的上下文及其目的对于回答问题很重要,但在这种情况下,就像我提到的,我真的不需要在this任何时候访问该对象。调用函数时使用它仍然是一个好习惯吗?我问的并不是“这个”如何工作,而是什么时候适合使用它,什么时候不适合。
何时需要/最佳实践使用关键字 this
当您想要访问某些内容时,通常会使用此方法。因此,例如,如果您有一个自定义对象并希望在某个方法中使用某些属性,则应该使用this.
function Person(fname, lname){
this.fname = fname;
this.lname = lname;
this.fullName = function(){
return this.fname + ' ' + this.lname;
}
}
var p = new Person('foo', 'bar');
console.log(p.fullName())Run Code Online (Sandbox Code Playgroud)
如果您看到,在当前构造函数中,我创建了一个 function( fullName) ,它需要访问fname它lname所属的对象的属性。this这是必须要用到的地方。
现在在声明时,什么时候使用
this?
构造函数中属于该对象一部分的任何属性都this将成为该对象的一部分。因此,如果您需要一些只能由您访问但外部无法访问的内容,您可以使用function代替this.
function Person(fname, lname){
var self = this;
self.fname = fname;
self.lname = lname;
// This function is private
function getFullName() {
var name = '';
var seperator = '';
if (fname) {
name += self.fname;
seperator = ' ';
}
if (lname) {
name += seperator + self.lname;
}
return name;
}
this.fullName = function(){
return getFullName();
}
}
var p = new Person('foo', 'bar');
console.log(p.fullName())Run Code Online (Sandbox Code Playgroud)
至于你的代码,我已经在评论中解释了它的工作原理:
在非严格模式下,
thiswill 指向window并且任何不在函数中的声明都将成为全局范围的一部分。
但正如@Jonas W所指出的那样,这是一种不好的做法。为什么不好?
var|let|const)定义的变量都将成为全局作用域的一部分。