← 返回首页
Javascript基础教程(二十二)
发表时间:2020-03-29 15:19:52
讲解Javascript的箭头函数

ES6标准新增了一种新的函数:Arrow Function(箭头函数)。 箭头函数本质还是函数,我们来看看他与JavaScript中普通函数的区别,先看看写法上的区别。

写箭头函数,我们记住一个顺序就好,参数、箭头、函数体、这个顺序记住就足够了,参数、箭头、函数体、这三个是必须的,函数名可以没有,但这三项必须有,一些简写的方式也是简写这三项里的东西。

1.如何定义箭头函数

例如:

<script>
    let sayHello = ()=>console.log('Hello,Javascript');
    sayHello();
</script>
运行结果:
Hello,Javascript

如果函数体只有一行代码,大括号可以省略。

如果带多个参数,例如:

<script>
    let add = (x,y)=>{
        console.log(x+y);
        return x+y;
    }
    console.log(add(10,7));
</script>
运行结果:
17
17

2.this指向问题

箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。

例如:

<script>
    var sum = 100;
    var obj = {
        sum: 10,
        fun:function(){
            let f =()=>console.log(this.sum);
            return f;
        }
    };
    function con(callback) {
        callback();
    }
    obj.fun()();
    con(obj.fun());
</script>

运行结果:
10
10

说明使用了箭头函数,this明确指向obj对象。

如果使用匿名函数,改写如下:

<script>
    var sum = 100;
    var obj = {
        sum: 10,
        fun:function(){
            //let f =()=>console.log(this.sum);
            let f = function(){
                console.log(this.sum);
            };
            return f;
        }
    };
    function con(callback) {
        callback();
    }
    obj.fun()();
    con(obj.fun());
</script>

运行结果:
100
100

说明匿名函数里的this指向window对象。

注意:如果最外层的sum使用let声明,则不会绑定到window对象。

<script>
    let sum = 100;
    var obj = {
        sum: 10,
        fun:function(){
            //let f =()=>console.log(this.sum);
            let f = function(){
                console.log(this.sum);
            };
            return f;
        }
    };
    function con(callback) {
        callback();
    }
    obj.fun()();
    con(obj.fun());
</script>

运行结果: undefined undefined