箭頭函數(shù)的this指向誰
回答
愛揚(yáng)教育
2022-06-07
- 相關(guān)推薦
(2)即使是call,apply,bind等方法也不能改變箭頭函數(shù)this的指向
擴(kuò)展資料
一些實(shí)例加深印象
(1)hello是全局函數(shù),沒有直接調(diào)用它的對(duì)象,也沒有使用嚴(yán)格模式,this指向window
function hello() {
console.log(this); // window
}
hello();
(2)hello是全局函數(shù),沒有直接調(diào)用它的對(duì)象,但指定了嚴(yán)格模式('use strict'),this指向undefined
function hello() {
'use strict';
console.log(this); // undefined
}
hello();
(3)hello直接調(diào)用者是obj,第一個(gè)this指向obj,setTimeout里匿名函數(shù)沒有直接調(diào)用者,this指向window
const obj = {
num: 10,
hello: function () {
console.log(this); // obj
setTimeout(function () {
console.log(this); // window
});
}
}
obj.hello();
(4)hello直接調(diào)用者是obj,第一個(gè)this指向obj,setTimeout箭頭函數(shù),this指向最近的函數(shù)的this指向,即也是obj
const obj = {
num: 10,
hello: function () {
console.log(this); // obj
setTimeout(() => {
console.log(this); // obj
});
}
}
obj.hello();
(5)diameter是普通函數(shù),里面的this指向直接調(diào)用它的對(duì)象obj。perimeter是箭頭函數(shù),this應(yīng)該指向上下文函數(shù)this的指向,這里上下文沒有函數(shù)對(duì)象,就默認(rèn)為window,而window里面沒有radius這個(gè)屬性,就返回為NaN。
const obj = {
radius: 10,
diameter() {
return this.radius * 2
},
perimeter: () => 2 * Math.PI * this.radius
}
console.log(obj.diameter()) // 20
console.log(obj.perimeter()) // NaN
(1)hello是全局函數(shù),沒有直接調(diào)用它的對(duì)象,也沒有使用嚴(yán)格模式,this指向window
function hello() {
console.log(this); // window
}
hello();
(2)hello是全局函數(shù),沒有直接調(diào)用它的對(duì)象,但指定了嚴(yán)格模式('use strict'),this指向undefined
function hello() {
'use strict';
console.log(this); // undefined
}
hello();
(3)hello直接調(diào)用者是obj,第一個(gè)this指向obj,setTimeout里匿名函數(shù)沒有直接調(diào)用者,this指向window
const obj = {
num: 10,
hello: function () {
console.log(this); // obj
setTimeout(function () {
console.log(this); // window
});
}
}
obj.hello();
(4)hello直接調(diào)用者是obj,第一個(gè)this指向obj,setTimeout箭頭函數(shù),this指向最近的函數(shù)的this指向,即也是obj
const obj = {
num: 10,
hello: function () {
console.log(this); // obj
setTimeout(() => {
console.log(this); // obj
});
}
}
obj.hello();
(5)diameter是普通函數(shù),里面的this指向直接調(diào)用它的對(duì)象obj。perimeter是箭頭函數(shù),this應(yīng)該指向上下文函數(shù)this的指向,這里上下文沒有函數(shù)對(duì)象,就默認(rèn)為window,而window里面沒有radius這個(gè)屬性,就返回為NaN。
const obj = {
radius: 10,
diameter() {
return this.radius * 2
},
perimeter: () => 2 * Math.PI * this.radius
}
console.log(obj.diameter()) // 20
console.log(obj.perimeter()) // NaN