JS中的this指向问题

普通函数中的this指向:

 1   var name = 'window'
 2 
 3   var A = {
 4     name: 'A',
 5     sayHello: function() {
 6       console.log(this.name)
 7     }
 8   }
 9 
10   A.sayHello()  //输出A
11 
12   var B = {
13     name: 'B'
14   }
15 
16   A.sayHello.call(B)  //输出B
17   A.sayHello.call()   //不传参指向全局window对象,输出window

由上可知,普通函数中this的指向只跟调用的对象有关

 

箭头函数中的this指向:

 1   var id = '全局'
 2 
 3   var obj = {
 4     id: 'A',
 5     sayHi: () => {
 6       console.log(this.id)
 7     }
 8   }
 9 
10   obj.sayHi()  //输出全局

按照普通函数的规律来看,这里应该输出的是 'A'

但是结果输出的是 ‘全局’

这里的sayHi()处于全局作用域下

 

再看一个栗子

 1   var id1 = 'window'
 2 
 3   var obj1 = function() {
 4     var id1 =  'A1'
 5     var sayHi1 = () => {
 6       console.log(this.id1)
 7     }
 8     sayHi1()
 9   }
10 
11   obj1()  //输出'window'

此处执行函数obj1后,输出‘window’

这里的sayHi1()处于obj1()的函数作用域下,该函数作用域指向全局对象window

 

由上两例可知:箭头函数的this指向定义该函数时该函数所在的作用域指向的对象

关于作用域的问题可以看看JavaScript作用域与作用域链

 

 

 

 

 

节选自ES6箭头函数的this指向详解

posted @ 2021-03-09 21:27  memeflyfly  阅读(59)  评论(0编辑  收藏  举报