ES6-箭头函数

ES6 在函数扩展方面,新增了很多特性。例如:

  • 箭头函数

  • 参数默认值

  • 参数结构赋值

  • 剩余参数

  • 扩展运算符

  • this 绑定

  • 尾调用

箭头函数

定义箭头函数的语法

语法:

(参数1, 参数2 ...) => { 函数体 }
  • 如果有且仅有 1 个形参,则()可以省略

  • 如果函数体内有且仅有 1 条语句,则{}可以省略,但前提是,这条语句必须是 return 语句。

需要强调的是,箭头函数是没有函数名的,既然如此,那要怎么调用箭头函数呢?你可以将箭头函数赋值给一个变量,通过变量名调用函数;也可以直接使用箭头函数。我们来看看下面的例子。

举例

写法 1、定义和调用函数:(传统写法)

function fn1(a, b) {
    console.log('heihei');
    return a + b;
}
​
console.log(fn1(1, 2)); //输出结果:3

写法 2、定义和调用函数:(ES6 中的写法)

const fn2 = (a, b) => {
    console.log('heihei');
    return a + b;
};
​
console.log(fn2(1, 2)); //输出结果:3

上面的两种写法,效果是一样的。

从上面的箭头函数中,我们可以很清晰地看到变量名、参数名、函数体。

另外,箭头函数的写法还可以精简一下,继续往下看。

在箭头函数中,如果方法体内只有一句话,且这句话是 return 语句,那就可以把 {}省略。写法如下:

const fn2 = (a, b) => a + b;
​
console.log(fn2(1, 2)); //输出结果:3

在箭头函数中,如果形参只有一个参数,则可以把()省略。写法如下:

const fn2 = (a) => {
    console.log('heihei');
    return a + 1;
};
​
console.log(fn2(1)); //输出结果:2

箭头函数的 this 的指向

箭头函数只是为了让函数写起来更简洁优雅吗?当然不只是这个原因,还有一个很大的作用是与 this 的指向有关。

ES6 之前的普通函数中:this 指向的是函数被调用的对象(也就是说,谁调用了函数,this 就指向谁)。

而 ES6 的箭头函数中:箭头函数本身不绑定 this,this 指向的是箭头函数定义位置的 this(也就是说,箭头函数在哪个位置定义的,this 就跟这个位置的 this 指向相同)。

代码举例:

const obj = { name: '张三' };
​
function fn1() {
    console.log(this); // 第一个 this
    return () => {
        console.log(this); // 第二个 this
    };
}
​
const fn2 = fn1.call(obj);
fn2();

打印结果:

obj
obj

上面的代码中,箭头函数是在 fn1()函数里面定义的,所以第二个 this 跟 第一个 this 指向的是同一个位置。又因为,在执行 fn1.call(obj)之后,第一个 this 就指向了 obj,所以第二个 this 也是指向 了 obj。

箭头函数的 this 指向

代码举例:

var name = '张三';
var obj = {
    name: '李四',
    sayHello: () => {
        console.log(this.name);
    },
};
​
obj.sayHello();

上方代码的打印结果是什么?你可能很难想到。

正确答案的打印结果是张三

因为 obj 这个对象并不产生作用域, sayHello() 这个箭头函数实际仍然是定义在 window 当中的,所以 这里的 this 指向是 window。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值