ES6之函数的拓展(部分)
来源:互联网 发布:android源码语法 编辑:程序博客网 时间:2024/05/25 18:09
本文参考阮一峰老师的ECMAScript6入门
函数参数的默认值
ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。
function log(x, y = 'World') { console.log(x, y);}log('Hello') // Hello Worldlog('Hello', 'China') // Hello Chinalog('Hello', '') // Hello
一个容易忽略的地方是,参数默认值不是传值的,而是每次都重新计算默认值表达式的值。也就是说,参数默认值是惰性求值的。
let x = 99;function foo(p = x + 1) { console.log(p);}foo() // 100x = 100;foo() // 101
与解构赋值默认值结合使用
参数默认值可以与解构赋值的默认值,结合起来使用。
function foo({x, y = 5}) { console.log(x, y);}foo({}) // undefined, 5foo({x: 1}) // 1, 5foo({x: 1, y: 2}) // 1, 2foo() // TypeError: Cannot read property 'x' of undefined
rest 参数
ES6 引入 rest 参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
function add(...values) { let sum = 0; for (var val of values) { sum += val; } return sum;}add(2, 5, 3) // 10
注意,rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。
// 报错function f(a, ...b, c) { // ...}
箭头函数
ES6 允许使用“箭头”(=>)定义函数。
var f = v => v;
上面的箭头函数等同于:
var f = function(v) { return v;};
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
var f = () => 5;// 等同于var f = function () { return 5 };var sum = (num1, num2) => num1 + num2;// 等同于var sum = function(num1, num2) { return num1 + num2;};
如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。
var sum = (num1, num2) => { return num1 + num2; }
箭头函数可以与变量解构结合使用。
const full = ({ first, last }) => first + ' ' + last;// 等同于function full(person) { return person.first + ' ' + person.last;}
箭头函数使用注意点
箭头函数有几个使用注意点。
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
上面四点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。
function foo() { setTimeout(() => { console.log('id:', this.id); }, 100);}var id = 21;foo.call({ id: 42 });// id: 42
上面代码中,setTimeout的参数是一个箭头函数,这个箭头函数的定义生效是在foo函数生成时,而它的真正执行要等到100毫秒后。如果是普通函数,执行时this应该指向全局对象window,这时应该输出21。但是,箭头函数导致this总是指向函数定义生效时所在的对象(本例是{id: 42}),所以输出的是42。
- ES6之函数的拓展(部分)
- ES6之字符串的拓展(部分)
- ES6之数组的拓展(部分)
- ES6 函数的拓展
- ES6学习4(函数的拓展)
- ES6基础教程(5)-函数的拓展
- ES6之字符串拓展
- es6之函数的扩展
- ES6学习之路(四) 数组拓展
- ES6学习5(对象的拓展)
- es6---解构赋值与字符串的拓展
- ES6 学习笔记之《函数的扩展》
- ES6之Generate函数的next方法
- ES6系列之---字符串的扩展函数
- ES6系列之---对象的扩展函数
- es6之箭头函数
- ES6之箭头函数
- ES6之箭头函数
- 程序员日常工作英文20170718
- HTML入门笔记7-粗体、斜体和下划线标签
- 学习笔记——数据库事务
- 测试简介
- linux debian安装配置SVN服务器
- ES6之函数的拓展(部分)
- 【Python】实现一个天气查询
- javascript学习笔记
- SharedPreferences存储数据
- 小白玩转爬虫!(Python)
- char*="xxx"
- 自用基础4-方法
- linux debian系统配置apache2的SSL证书
- 方法与数组