[关闭]
@Wangww0925 2019-08-20T08:18:12.000000Z 字数 2241 阅读 261

ES6中的箭头函数和扩展

ES6


在这里我们先不着急看ES6中的函数,而是先回顾一下ES5中的函数写法

回顾ES5 编写一个函数

  1. function add(a, b){
  2. return a + b;
  3. }
  4. console.log(add(1, 2)); // 3

以上就是ES5编写函数的最基本写法


ES6中增加默认值

在ES6中给我们增加了默认值的操作,现在我们修改上边的代码,可以看到现在只需要传递一个参数也是可以正常运行的。

  1. function add1(a, b = 1){
  2. return a + b;
  3. }
  4. console.log(add1(1)); // 2

主动抛出错误

在使用Vue的框架中,可以经常看到框架主动抛出一些错误,比如v-for必须有:key值。那尤大神是如何做到的那?其实很简单,ES6中我们直接用throw new Error( xxxx ),就可以抛出错误。

  1. function add2(a, b = 1){
  2. if (a == 0){
  3. throw new Error('A is error');
  4. }
  5. return a + b;
  6. }
  7. console.log(add2(0)); // Uncaught Error: A is error

函数中的严谨模式

ES5 中的严谨模式

  1. 'user strict'
  2. function add3(a, b = 1){
  3. return a + b;
  4. }
  5. console.log(add3(1)); // 2

我们在ES5中就经常使用严谨模式来进行编程,但是必须写在代码最上边,相当于全局使用。在ES6中我们可以写在函数体中,相当于针对函数来使用。

ES6 函数中的严谨模式

  1. function add4(a, b = 1){
  2. 'user strict'
  3. return a + b;
  4. }
  5. console.log(add4(1)); // 2

上边的代码如果运行的话,你会发现浏览器控制台报错,这是ES6中的一个坑,如果没人指导的话,可能你会陷进去一会。

这个错误的原因就是如果你使用了默认值,再使用严谨模式的话,就会有冲突,所以我们要取消默认值的操作,这时候你在运行就正常了。

  1. function add5(a, b){
  2. 'user strict'
  3. return a + b;
  4. }
  5. console.log(add5(1, 2)); // 3

获得需要传递的参数个数 xxx.length 【得到的是必须传入的参数】

如果你在使用别人的框架时,不知道别人的函数需要传递几个参数怎么办?ES6为我们提供了得到参数的方法(xxx.length)。

我们用代码看一下需要传递的参数个数。

  1. function add6(a, b){
  2. 'user strict'
  3. return a + b;
  4. }
  5. console.log(add6.length); // 2

注意:如果我们去掉严谨模式,并给第二个参数加上默认值的话,这时候add.length的值就变成了1, 也就是说它得到的是必须传入的参数

  1. function add7(a, b = 1){
  2. return a + b;
  3. }
  4. console.log(add7.length); // 1

箭头函数

注意: 箭头函数中不可加new,也就是说箭头函数不能当构造函数进行使用。

1、方法体内语句一条和多条

当函数体只有一条语句,且为 return 语句时,则 return可以省略

  1. function fun (a, b = 1){
  2. return a + b;
  3. }
  4. console.log(fun(1)); // 2
  5. // 箭头函数
  6. var fun1 = (a, b = 1) => a + b;
  7. console.log(fun1(1)); // 2
  8. // var fun2 = (a, b = 1) => return a + b; // 编译报错,相当于是2条语句(return 和 a + b)

如果一定要加上return,则可以修改成如下

  1. var fun2 = (a, b = 1) => {
  2. return a + b;
  3. }
  4. console.log(fun2(1)); // 2

当函数体具有多条语句,则使用{}

  1. function fun3 (a, b = 1){
  2. console.log('www');
  3. return a + b;
  4. }
  5. console.log(fun3(1)); // 2
  6. // 箭头函数
  7. var fun4 = (a, b = 1) => {
  8. console.log('www');
  9. return a + b;
  10. }
  11. console.log(fun4(1)); // 2

2、参数不同的箭头函数

多个参数

  1. function fun5 (a, b = 1){
  2. return a + b;
  3. }
  4. console.log(fun5(1)); // 2
  5. // 箭头函数
  6. var fun6 = (a, b = 1) => a + b;
  7. console.log(fun6(1)); // 2

单个参数

  1. function fun7 (a){
  2. console.log(a);
  3. }
  4. fun7(3); // 3
  5. // 箭头函数
  6. var fun8 = a => console.log(a);
  7. fun8(4); // 4

3、函数内this指向

  1. var num = 100;
  2. var obj = {
  3. num: 200,
  4. getNum: function (){
  5. console.log(this.num);
  6. }
  7. }
  8. obj.getNum(); // 200,this指向obj(本对象)
  9. // 箭头函数
  10. var number = 100;
  11. var obj1 = {
  12. number: 200,
  13. getNum: () => {
  14. console.log(this.number);
  15. }
  16. }
  17. obj1.getNum(); // 100,注意 箭头函数的 this指向变成window
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注