JavaScript中的this指向?箭頭函式與普通函式區別?
阿新 • • 發佈:2020-12-23
匿名函式,定時器,自執行函式中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指向無法改變