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