普通函数中的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作用域与作用域链