ES6---箭頭函式與function定義函式有什麼區別?在箭頭函式中,this指向,建構函式,變數提升是如何表現的?
阿新 • • 發佈:2019-02-07
- 簡潔
///function定義函式
function aaa(a,b){
return a+b;
}
///箭頭函式定義函式
var aaa=(a,b)=>{return a+b;}
this指向
function傳統定義的函式,this指向隨著呼叫環境的改變而改變,而箭頭 函式中的指向則是固定不變,一直指向定義環境的。
///function定義函式中的this指向
function aaa(){
console.log(this)
}
var obj={
aaa:aaa
};
aaa();//此時輸出window物件
obj.aaa();//此時輸出obj物件
///箭頭函式中的this指向
var aaa=()=>{
console.log(this)
};
var obj={
aaa:aaa
}
aaa();//此時指向window
obj.aaa();//此時指向window
- 建構函式
箭頭函式固然好用,但是不能用於建構函式,即不能被new一下;
///使用function方法定義建構函式
function per(){
this.name='aaa';
this.sex='man'
};
var ming=new per();
console.log(ming); /// {name: "aaa", sex: "man"}
///使用箭頭函式定義建構函式
var per=>{
this.name='bbb';
this.sex='women';
};
var gang=new per();
///執行便會報錯:Uncaught TypeError: per is not a constructor
變數提升
由於js的記憶體機制,function的級別最高,而用箭頭函式定義函式的時候,需要var(let const定義的時候更不必說)關鍵詞,而var所定義的變數不能得到變數提升,故箭頭函式一定要定義於呼叫之前!
///function定義函式時候的位置
aaa();//aaa
function aaa(){
console.log('aaa' )
}
///箭頭函式定義的位置
var aaa=()=>{
console.log('aaa')
};
aaa();//aaa
bbb();///報錯bbb is not a function
var bbb=()=>{
console.log('bbb')
}