ES6新特性箭头函数 什么是箭头函数?箭头函数的特点?

1.语法: (形参1,形参2...) => {函数体}

箭头函数的用途:

箭头函数一般用于回调函数,而回调函数通常是匿名函数。

2. 箭头函数的特点

1)、箭头函数不同于一般函数:

(1)、一般函数可以先调用后定义,而箭头函数只能先定义后调用;

(2)、一般函数有arguments,而箭头函数没有arguments、但可以使用剩余参数;

(3)、一般函数可以当作构造函数,而箭头函数不能当作构造函数,因为箭头函数没有自己的this;

 <script>
        //一般函数:
        // demo(1, 3, 5);

        function demo() {
            console.log(arguments, 333);
        }

        let obj = new demo();

        //箭头函数:

        // test();
        let test = (...y) => {
            console.log(y);
            // console.log(arguments); // arguments is not defined
            console.log('test()函数');
        }

        test(5, 6, 7);

        //箭头函数不能当作构造函数
        //let obj2 = new test(); //test is not a constructor
    </script>

2)、箭头函数的简写形式:

(1)、当箭头函数只有一个形参时可以省略圆括号;

(2)、当箭头函数体只有一条语句并且该语句会作为返回值返回时,可以省略花括号及return关键词;

   <script>
        // let fn = (num) => {
        let fn = num => {
            console.log(num * 9);
        }

        fn(12);

        // let test = (m, n) => {
        //     return m * n;
        // }
        let test = (m, n) => m * n;


        let y = test(8, 9);
        console.log(y);
    </script>

3)、箭头函数的this指向依赖外层函数中的this指向,箭头函数中的this指向不绑定当前调用者,箭头函数中的this指向定义时所在函数中的this指向,与当前调用者没有关系;

 <script>
        function mydemo() {
            // console.log(this, 11);
            setTimeout(function() {
                console.log(this, 222);
            }, 2000);

            setTimeout(() => {
                console.log(this, 3333);
            }, 3000);
        }

        // mydemo(); //window  window
        // new mydemo(); // window  {}


        var brand = "苹果";
        //  let brand = "苹果";
        var obj = {
            brand: "梨",
            fn: function() {
                console.log(this, 111);
                setTimeout(function() {
                    console.log(this.brand, this, 222);
                }, 2000);

                setTimeout(() => {
                    console.log(this.brand, 333);
                }, 3000);
            }
        };

        // obj.fn(); //苹果  梨

        var goods = '华为笔记本';
        var obj2 = {
            goods: '联想电脑',
            demo: () => {
                setTimeout(function() {
                    console.log(this.goods, this, 222);
                }, 2000);

                setTimeout(() => {
                    console.log(this.goods, this, 333);
                }, 3000);
            }
        };

        //  obj2.demo(); //华为笔记本  华为笔记本

        var fn = () => {
            setTimeout(() => {
                console.log(this);
            }, 2000);
        }

        // fn(); //window
        //  fn.call(new Object); //window

        function fn2() {
            // console.log(this, 11);
            setTimeout(() => {
                console.log(this);
            }, 2000);
        }

        fn2.call(new Object); //{}
    </script>

3. 箭头函数不适用的场景

1)、对象中的方法不能使用箭头函数;

2)、给某个DOM对象绑定方法时不能使用箭头函数;

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var obj = {
            "uname": "张三",
            // demo: function() {
            demo: () => {
                console.log(this);
                console.log(this.uname, 999); // undefined
            }
        };

        obj.demo();
    </script>
</head>

<body>
    <!-- <form action="/yesok.html"> -->
    <button>测试按钮</button>
    <!-- </form> -->
    <script>
        let btns = document.getElementsByTagName('button')[0];
        // btns.addEventListener('click', function() {
        btns.addEventListener('click', () => {
            console.log(this);
        });
    </script>
</body>

4.函数形参默认值

注意:设置了默认值的形参要放在所有形参的最右边

 <script>
        // jsq(8, 6, '*');
        console.log(jsq(8, 6));

        //需求:实现一个简单的计算器功能
        //注意:设置了默认值的形参要放在所有形参的最右边
        function jsq(m, n, flg = '+') {
            // function jsq(m, flg = '+', n) {
            let total = 0;
            switch (flg) {
                case '+':
                    total = m + n;
                    break;
                case '-':
                    total = m - n;
                    break;
                case '*':
                    total = m * n;
                    break;
                case '/':
                    total = m / n;
                    break;
            }
            return total;
        }
    </script>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值