1、普通函數中的this總是指向調用它的那個對象,
箭頭函數沒有自己的this,他的this永遠指向其定義環境,任何方法都改變不了其指向,如call()、bind()、apply()。(正是因為它沒有this,所以也就不能用作構造函數,也沒有原型對象)
2、箭頭函數不能當作構造函數,也就是說,不能使用new命令,否則會報錯。
3、箭頭函數不能使用yield命令,因此箭頭函數不能用作genertor函數。
4、箭頭函數沒有原型屬性。
5、箭頭函數不能使用argumen對象,該對象在函數體內不存在。如果要用,可以用rest參數代替。
6、變量提升:由於js的內存機制,function的級別最高,而用箭頭函數定義函數的時候,需要var(let、const)關鍵字,而var所定義的變量不能得到變量提升。故箭頭函數一定要定義於調用之前。
this的指向問題?
1、普通函數中,this指向其函數的直接調用者;
2、箭頭函數中,this指向其定義環境,任何方法都改變不了其指向,如call()、bind()等;
3、構造函數中,如果不使用new,則this指向window,如果使用new創建了一個實例,則this指向該實例。
//不使用new指向window
function Person(name){
console.log(this)// window
this.name = name;
}
Person('inwe')
// 使用new
function Person (name) {
this.name = name
console.log(this) // people
self = this
}
var people = new Peron('iwen')
console.log(self === people) //true
//這里new改變了this指向,將this由window指向Peoson的實例對象people
4、window內置函數中,如setInterval,setTimeout等,其內部的this指向Window。
5、匿名函數的this指向Window。
6、apply()、call()、bind()可以改變this的指向
