箭頭函式的this和普通函式的this有何不同

2021-09-24 13:22:53 字數 823 閱讀 3880

在我們講解之前先以一道題引入:

const shape =

, perimeter:()

=>

2* math.pi*

this

.radius

}shape.

diameter()

// 20

shape.

perimeter()

// nan

經過多番查閱資料,得出以下結論:

針對以上兩點,普通函式在被呼叫的時候它內部的this會指向呼叫它的那個物件,而箭頭函式本身沒有this,所以它內部的this是繼承自父執行上下文中的this

然後我們來解釋例子中的this,diameter是普通函式,this指向呼叫它的物件shape,所以this.radius是10;perimeter是箭頭函式,內部本身無this,它所在的物件是shape,shape的父執行上下文是window,所以箭頭函式內的this.x指向window.x (undefined)

理解了上面的知識點之後,我們思考一下下面的x、y值是多少

// 普通函式

var a =

11function

test1()

b()}

var x =

newtest1()

// 11

// 箭頭函式

var b =

11function

test2()

c()}

var y =

newtest2()

// 22

箭頭函式和普通函式的區別

面試時被問到箭頭函式和普通函式的區別。借用別人的乙個栗子 function make var testfunc make.call testfunc testfunc.call object object可以看到箭頭函式在定義之後,this 就不會發生改變了,無論用什麼樣的方式呼叫它,this 都不...

普通函式和箭頭函式的區別

箭頭函式 let fun 普通函式 function fun 箭頭函式相當於匿名函式,並且簡化了函式定義。箭頭函式有兩種格式,一種只包含乙個表示式,連和return都省略掉了。還有一種可以包含多條語句,這時候就不能省略和return。1 箭頭函式是匿名函式,不能作為建構函式,不能使用new let ...

普通函式和箭頭函式的區別

一 箭頭函式全是匿名函式,普通函式也可以有匿名函式,也可以有具名函式。function a let a function let a 二 箭頭函式不能用於建構函式,不能使用new。三 箭頭函式不繫結this,會捕捉其所在上下文的this指,會作為自己的this值,沒有辦法改變其指向 var obj ...