• this在js中是一个关键字,不是变量也不是属性名,js中不允许给this赋值。
  • 和变量不同,this值没有作用域的限制,嵌套函数不会从它的包含函数中继承this,很多人误以为调用嵌套函数时this值会指向它的外层函数的变量对象,实际上不是这样的。如果你想访问这个外层函数的this值,需要将this值保存在一个变量里,通常使用self来保存this。
  • 如果函数作为方法调用,那么this的值指向调用它的对象,如果作为函数调用,那么this值要么是全局对象(非严格模式中),要么undefined(严格模式中)。
  • 示例:
var o = {
	m: function(){
		var self = this;
		console.log(this===o);//true.因为对象o调用了m方法,函数作为方法调用,th
		//is值就会指向调用它的那个对象
	}
	f();//作为函数调用,this在非严格模式下指向window对象在严格模式下指向undefined
	function f(){
		console.log(this===o);//flase,this指向window
		console.log(this===o.m)//flase,嵌套函数的值并不指向它的外层函数的变量
		//对象
		console.log(this===window);//true,f作为函数调用this指向window
		console.log(self===o);//true,self是外层函数的this值指向o对象
	}
}
o.m();