箭頭函式是ES6引入的一種更簡潔的函式寫法,是匿名函式,只能作為運算式的運算元,語法:(引數)=> {函式體},對比普通函式宣告,箭頭函式格式更簡潔,沒有自己的this,不能作為建構式,沒有arguments,沒有函式提升,
1、簡潔的代碼格式
//只有 1個引數時,可以省略(),直接寫引數名
let double = x=>x+x;
//有0個或者多個引數時,引數串列要用()包裹起來
let add = (a,b)=>a+b
let rand = ()=>Math.random();
//函式體只有1條陳述句時,{}和 return 可省略,右邊值自動隱式return
let double = v=>v+v;
//如果陳述句為多條,函式體需用{}包裹,且需手動return
let total = v=>{
var sum = 0;
for(let i = 0;i < v;i++){
sum+=i;
}
return sum;
}
2、沒有自己的this
箭頭函式中訪問的 this實際上是其父級作用域中的this,箭頭函式本身的this是不存在的,避免了之前先用that=this這種hack寫法,同時,使用 bind,call,apply不能修改其this指向,
var obj1 = {
age: 1,
say: function() {
setTimeout(() => {
console.log(this,this.age); //objl 1 i
},0);
}
};
obj1.say();
3、不能作為建構式
如果通過new關鍵字呼叫,程式會拋出錯誤,同時也沒有原型,不存在prototype這個屬性,
var Person = (name) => {
this.name = name;
}
var person = new Person("jack");
//Uncaught Type Error: Person is not a constructor
4、沒有自己的arguments
可以使用rest引數代替arguments來訪問箭頭函式的引數串列,
var foo = (val) => {
console.log(arguments);
// Uncaught ReferenceError: arguments is not defined
};
foo();
5、箭頭函式是函式運算式(函式不提升)
非函式宣告,不能像函式宣告一樣被提升,
//函式宣告被提升,可以正常執行
console.log(getA)///getA(){}
getA()// A'
function getA() {
console.log('A')
}
//箭頭函式為運算式,提升的是變數getB,賦值為undefined,下一句執行時由于getB不是函式而報錯,
console.log(getB)// undefined
getB();//Uncaught TypeError: getB is nota function
var getB = ()=>{
console.log('B')
}
//注:普通函式運算式var demo=function(){}跟箭頭函式運算式一樣,也是提升的變數而不是函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/297859.html
標籤:其他
上一篇:人類高質量JS函式繼承
下一篇:iterator迭代器
