一、箭頭函數是在es6中添加的一種規范,它相當於匿名函數,簡化了函數的定義。
1、語法
a、function用var,let,cost來表示;
b、參數要寫在第一個等號后面;
參數有多個,需要加一個小括號,參數用逗號隔開);只有一個參數時,可以不需要括號;沒有參數,寫一對空的小括號。
c、函數的主體內容是放在箭頭后面
如果主體有多條語句,需要把它們放在一對大括號里;如果主體只有一條語句,那就直接寫(如果這條語句里有return,依然需要加上大括號);如果主體只有一條語句,並且是個對象,需要把它用括號括起來。
<script>
//多個參數
const fn = (a, b) => { let result = a + b; console.log(result);//3
} fn(1, 2) //只有一個參數
var fn2 = c => { console.log(c); //davina
} fn2('davina'); //沒有參數
let fn3 = () => { console.log('123'); } fn3(); //123
//函數里只有一句話
const fn4 = d => console.log(d); //lisa
fn4('lisa'); //函數里只有return一句話時
const fn5=()=>{return{a:10,b:20}}; console.log(fn5()); //{a: 10, b: 20}
</script>
2、需要注意的是:
箭頭函數只能先定義再使用,箭頭函數里沒有this對象,函數在哪里定義的,this就指向誰(箭頭函數會繼承外層函數調用的this綁定);
沒有this也就不能調用函數的call,apply,bind方法了;沒有this就不是構造函數,不能用new去調用;箭頭函數里沒有arguments對象。
<script> const dog = { color: 'white', show1: function () { console.log(this.color); }, show2: () => { console.log(this.color); }, show3: function () { const show4 = () => { console.log(this.color); } show4(); } } dog.show1();//white
dog.show2();//undefined
dog.show3(); //white
//不用用call和沒有arguments對象
const bigDog = { color: 'black' } dog.show2.call(bigDog); //undefined
const fn6 = () => { console.log(arguments) // ReferenceError: arguments is not defined
} fn6(1, 3); </script>
二、自執行函數:函數被定義后它可以自動執行。
函數表達式可以直接加上小括號調用但函數聲明不能直接調用,因為小括號里只能放表達式,不能放語句,function關鍵字既可以當作語句,也可以當作表達式,但是js規定function關鍵字出現在行首,一律解釋成語句。
<script>
var fn1 = function () { console.log('這是一個函數表達式'); //這是一個函數表達式
}(); // function fn2(){
// console.log('這是一個函數聲明'); //函數聲明加上小挌號報錯
// }();</script>
解決方法:不讓function出現在行首
a. 用括號把function主體括起來,轉成表達式,后面加括號
b.借助運算符(new + - ! typeof && || ...)
<script>
//1、加括號
(function fn2() { console.log('這是一個函數聲明'); //這是一個函數聲明
})(); (function fn2() { console.log('這是一個函數聲明') }());//這是一個函數聲明
//兩種模式
(function () { })(); (function () { }()); //2、函數變成表達式
0 + function (a) { console.log(a) //與數字相加變成表達式
}('與數字相加變成表達式') true && function (a) { console.log(a) //1.利用邏輯運算符變成表達式
}('1.利用邏輯運算符變成表達式') false || function (b) { console.log(b) }('2.利用邏輯運算符變成表達式') //2.利用邏輯運算符變成表達式
~function (c) { console.log(c) }('利用+ - !~ 變成表達式') //利用+ - !~ 變成表達式
typeof function (d) { console.log(d) }('利用typeof') //利用typeof
</script>
{
let x = 10;
((x) => {
console.log(x); //10
})(x);
}