箭頭函數(shù)
箭頭函數(shù)是es6當(dāng)中對(duì)函數(shù)的一種全新表示法后众。其將函數(shù)的簡(jiǎn)潔性發(fā)揚(yáng)到了極致浩聋!先來(lái)看一個(gè)最簡(jiǎn)單的箭頭函數(shù):
let fn = a => a
var m = prompt()
alert(fn(m))
1. 箭頭函數(shù)寫(xiě)法
一凶赁、如果只有一條語(yǔ)句咧栗,可以將{}和return省略掉
let fn = a => a+a
//相當(dāng)于
let fn = function(a){
return a+a;
}
二、如果語(yǔ)句為多條虱肄,則不可以省略{}和return
let fn = a => {
var b = 0;
console.log(a,b);
}
fn(10)
還有兩點(diǎn)需要注意致板!
一、
- 當(dāng)傳單個(gè)參數(shù)的時(shí)候咏窿,不需要加括號(hào)()
var fn = a => a
- 當(dāng)傳多個(gè)值的時(shí)候需要加括號(hào)
var fn = (a,b)=>a+b
二毅哗、
當(dāng)省略{}和return時(shí),如果返回的內(nèi)容是一個(gè)對(duì)象急凰,對(duì)象需要用括號(hào)()括起來(lái)
不加括號(hào)的話會(huì)是 undefined
var fn = a=>({a:'你好'}) console.log(fn())
2. 箭頭函數(shù)不能用于構(gòu)造函數(shù)
先來(lái)看構(gòu)造函數(shù)
var ful=function(age){
this.age=age;
}
var chl=new ful(18);
console.log(chl.age);//18
改為箭頭函數(shù)后
var ful = age => {
this.age=age;
}
var chl=new ful(18);//ful is not a constructor
console.log(chl.age);
3. 箭頭函數(shù)沒(méi)有prototype屬性
var fn = () => {};
console.log(fn.prototype); // undefined
4. 箭頭函數(shù)不綁定this
箭頭函數(shù)中沒(méi)有this 的指向放吩,在箭頭函數(shù)中this 的指向會(huì)指向離他最近的那個(gè)作用域
這來(lái)看一道面試題:
window.color = "red";
//let 聲明的全局變量不具有全局屬性,即不能用window.訪問(wèn)
let color = "green";
let obj = {
color: "blue",
getColor: () => {
return this.color;//this指向window
}
};
let sayColor = () => {
return this.color;//this指向window
};
console.log(obj.getColor())
obj.getColor();//red
console.log(sayColor())
sayColor();//red
總結(jié)
- 箭頭函數(shù)中沒(méi)有this 的指向根欧,在箭頭函數(shù)中this 的指向會(huì)指向離他最近的那個(gè)作用域
- 箭頭函數(shù)不能當(dāng)做構(gòu)造函數(shù)
- 箭頭函數(shù)中沒(méi)有 arguments 這個(gè)參數(shù)