函數——箭頭函數&自執行函數(二)


  一、箭頭函數是在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);
        }

 

 

    

 

    

    

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM