ES6—函数


ES6—函数

1.普通函数参数差别

ES5中默认值需要在函数内容赋值,ES6新增了默认参数,也就是参数的默认值,可以直接在参数内进行默认赋值,但是这种赋值是惰性的,就是会先检查你下面的js代码调用函数部分是否有传参,如果传参,默认值就不会直接赋值,这一点与ES6中的解构赋值很类似,

1 function f(x = 5){
2     console.log(x);
3 }
4 f();  //5   ,  进行了默认赋值,下面就不需要再进行给值了

 

 

 

 

2.函数默认参数注意点

* 参数变量不可以重复
* 参数变量不可在函数大括号内重新let定义

 

 

 

3.与解构赋值的配合使用

使用最多的应该就是与对象的解构赋值使用了把,在对象的解构赋值当中需要注意

1.单单只有对象的时候,调用函数时需要传入对象参数

1 //demo 
2 function f ({x=0}){
3     console.log(x);
4 }
5 f();    // 报错
6 f({});   //0;

 

2.可以利用对象的解构赋值中的默认赋值来解决这一必传参数的问题

1 function f ({x=0} = {}){
2     console.log(x);
3 }
4 f();    // 报错
5 f({});   //0;

 

 

 

 

 

3.作用域问题

函数的参数默认值是惰性赋值,但是当默认值执行的时候会产生一个作用域,因此函数默认值的情况下要分清楚作用域

 1 var x = 1;
 2 function f(x,y=x){
 3        console.log(y);
 4    }
 5 f(2);   //这里y的值为2,说明括号内在进行y的默认赋值操作的时候,单独形成一个作用域,而非全局变量
 6 ?
 7 let x= 2;
 8 function f(y=x){
 9        console.log(y);
10    }
11 f(2);   //这里全局,当单独形成的作用域的时候,作用域内没有定义,这事就会找全局作用域,或者父作用域里面的变量x的值
12  

 

 

 

 

4.严格模式

一句话,ES5中函数内部可以设置为严格模式,但是ES6修改了,如果使用了默认值,解构赋值,或者是扩展运算符都是不可以使用严格模式的

 

 

 

5.name属性

返回一个函数名字,如果是字面量 方法匿名的函数,仍旧会返回一个匿名函数的函数名字

 

 

 

6.箭头函数

注意:

1.函数体内部指向是固定的,而非时刻就是指

2.不可以当构造函数,不可以使用命令

3.不可以使用arguments对象,该对象在函数体内部不存在,如果要用可以用rest参数

4.不可以使用Generator函数。

 

 

 

绑定this,

箭头函数的this对象可以绑定,就是在使用的时候,可以通过::进行绑定

:: 左边是一个对象,右边是一个函数

1 var method =obj::obj.foo   //表示将右边的方法绑定到左边的对象上
2 foo::bar;
3 bar.bind(foo)  //一样
4  

 

 

 

 

js