this的存在主要解决函数作用域的问题,因为函数可以在任何地方执行,this用于指向改函数所运行的环境
var obj = {
bar: 1,
foo: function() { console.log(this.bar) }
}
obj.foo() // 1
obj对象的foo实际上是地址,这个地址指向一个函数。由于该函数由obj对象调用,所以this.bar指向obj对象中的bar变量
var obj = {
bar: 1,
foo: function() { console.log(this.bar) }
}
var bar = 2
var foo = obj.foo
foo() // 2
var foo = obj.foo,将obj.foo的地址的值赋值给foo,它们指向同一个函数。由于foo在全局环境中调用,所以this.bar指向全局环境中的bar
参考阮一峰博客:JavaScript 的 this 原理