1. 程式人生 > 實用技巧 >JavaScript中的this指向?箭頭函式與普通函式區別?

JavaScript中的this指向?箭頭函式與普通函式區別?

匿名函式,定時器,自執行函式中this指向window

普通函式直接呼叫this指向window

事件函式中this指向觸發事件的元素

物件中方法中this誰呼叫的方法this指向誰

建構函式中this指向這個例項

call,apply,bind方法中this指向第一個引數值

嚴格模式下全域性作用域中函式中this 指向的是undefined

箭頭函式中this由其外部的作用域中的this決定

box.onclick = function(){
    let fun = () => {
        console.log(this)    // this 指向 box,外部的函式作用域中this指向box
} console.log(this) // this 指向 box fun() } // 普通匿名函式 box.onclick = function(){ let fun = function () { console.log(this) // this 指向window,匿名函式 } console.log(this) // this 指向 box fun() }

簡單的說,箭頭函式就是對匿名函式的簡化

1.箭頭函式形式上做了改變,簡化了函式體。

  一般的箭頭函式這樣寫:

() => {
    
return }

  單引數,單語句

(x) => x+1 //return可以省略
x => x+1   //括號也可以省略
// 普通匿名函式寫法
function (x) {
    return x+1
}

  沒有引數時,必須要有個括號

() => 100
// 普通匿名函式
function () {
    return 100
}

2.普通函式支援通過arguments 獲取未知個數的實參,而箭頭函式不支援arguments用法。

箭頭函式中可變引數是利用rest取引數值
可以利用… 對個數不明引數的引數進行囊括。函式內,可以通過陣列的方式。對rest取值,即可拿到實參。

(x, y, ...rest) =>{
    let i,sum 
= x+y for (i=0; i < rest.length; i++){ sum += rest[i] } return sum }

3.箭頭函式在es6標準下可使用,普通函式則沒有這個限制。

4.this指向的修改。箭頭函式的this指向外部,常在對類的方法進行構造時使用,使函式體內的this始終指向這個類。如果需要this指向當前源,則可使用普通函式。

5.箭頭函式是匿名函式,不能作為建構函式,不能使用new

6.箭頭函式沒有原型屬性

7.箭頭函式不能當做Generator函式,不能使用yield關鍵字

8.箭頭函式this指向無法改變