前端面试题—this的指向

this的指向判断规则

  1. 函数直接用圆括号运行,this指向是window对象: fun()
<script>
		var obj={
          
   
			a:1,
			fun:function(){
          
   
				var a=2
				return function (){
          
   
					return this.a
				}
			}
		}
		var a=3
		var res=obj.fun()()
		console.log(res)   //结果:3
		// 解析流程
		// obj.fun = function(){
          
   
		// 		var a=2
		// 		return function (){
          
   
		// 			return this.a
		// 		}
		// 	},
		// obj.fun()=function (){
          
   
		// 			return this.a
		// 		}
		// obj.fun()():  此时this指向window,this.a=window.a=3
		
	</script>

2.对象打点调用函数,this指向是对象: obj.fun()

<script>
		var obj={
          
   
			a:1,
			fun:(function(){
          
   
				var a=2
				return function (){
          
   
					return this.a
				}
			})()
		}
		var a=3
		var res=obj.fun()
		console.log(res)   //结果:1
		
		
	</script>
  1. 数组(类数组对象)中枚举出函数,this指向这个数组(类数组对象): arr
<script>
		
		function fun1(fn){
          
   
			arguments[0](3,4)
		}
		function fun2(){
          
   
			console.log((this.length))  
		}
		fun1(fun2,5,6,7,8) //打印结果:5
	</script>
  1. 定时器调用函数,this指向window
  2. 被当做了事件处理函数,this指向触发事件的dom元素
  3. 用new调用函数,this指向函数体内秘密创建的空白对象
  4. 用apply、call、bind可以改变的this指向,this指向apply(object,[arg1,arg2])、call(object,arg1,arg2)中的对象
经验分享 程序员 微信小程序 职场和发展