本文只是学习es6的一些简单笔记,详情请看阮一峰的es6入门。
关于函数参数的默认值
- 什么时候需要为函数参数设置默认值?
答:该参数可以省略不传的时候。(为函数参数设置默认值就意味着该参数可以省略)。所以通常情况下,应该为函数的尾参数设置默认值。如果非尾部的参数设置默认值,实际上这个参数是没法省略的。 - ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。
function log(x, y = 'World') { console.log(x, y); }
- 参数变量是默认声明的,所以在函数体中不能用let或const再次声明。
- 使用参数默认值时,函数不能有同名参数。
- 参数默认值是惰性求值的。
关于rest参数
- 定义
ES6 引入 rest 参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。 - 注意
rest 参数之后不能再有其他参数(即只能是最后一个参数)
关于严格模式
只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。解决方法有两种。
- 设定全局性的严格模式。
- 把函数包在一个无参数的立即执行函数里面。
关于箭头函数
- 语法描述
ES6 允许使用“箭头”(=>)定义函数。=>之前的为函数参数,用一个圆括号代表参数部分;之后的为函数体,用一个大括号代表函数体部分。当然,如果只有一个参数,圆括号可以省略;如果函数体只有一条语句,可以省略大括号。建议圆括号和大括号都不要省略,以免造成一些不可预料的错误。var f = v => v; var sum = (num1, num2) => num1 + num2;
- 注意事项
- 不可以当作构造函数,也就是说,不可以使用new命令。
- 不可以使用arguments对象,该对象在函数体内不存在。
- 不能用作 Generator 函数。
- 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
关于函数属性
- length属性
函数的length属性,将返回没有指定默认值的参数个数。更准确的说应该返回指定默认值的参数之前的参数个数。也就是说,从指定了默认值的参数及该参数之后的参数都不计入length属性当中。除此之外,length属性也不包括 rest 参数。function log(x, y = "World") { console.log(x, y) } console.log(log.length) //1 function foo(x, y = "World", z) { // ... } console.log(foo.length) //1 function fun(x, ...z) { console.log(x, ...z) } console.log(fun.length) //1
- name属性
函数的name属性,返回该函数的函数名。bind返回的函数,name属性值会加上bound前缀。function foo() { // ... } console.log(foo.name) //foo console.log(foo.bind({}).name) //bound foo
关于函数绑定运算符
- 用途
用来取代call、apply、bind调用。 - 语法
函数绑定运算符是并排的两个冒号(::),双冒号左边是一个对象,右边是一个函数。
该运算符会自动将左边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。
如果双冒号左边为空,右边是一个对象的方法,则等于将该方法绑定在该对象上面。foo::bar // 等同于 bar.bind(foo) ::console.log // 等同于 console.log.bind(console);