ECMAScript 6学习笔记之----函数扩展

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pengjx2014/article/details/89435310

函数参数设置默认值

ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。


function log(x, y = 'World') {
  console.log(x, y);
}

log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

function Point(x = 0, y = 0) {
  this.x = x;
  this.y = y;
}

const p = new Point();
p // 

 ES6 的写法还有两个好处:首先,阅读代码的人,可以立刻意识到哪些参数是可以省略的,不用查看函数体或文档;其次,有利于将来的代码优化,即使未来的版本在对外接口中,彻底拿掉这个参数,也不会导致以前的代码无法运行。

与结构赋值默认值结合使用作用域

参数默认值可以与解构赋值的默认值,结合起来使用。

function foo({x, y = 5}) {
    console.log(x, y);
}

foo({}) // undefined 5
foo({x: 1}) // 1 5
foo({x: 1, y: 2}) // 1 2



undefined 5
1 5
1 2

rest参数与length

ES6 引入 rest 参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

function add(...values) {
    return values.reduce(sum1);
}

print(add(3, 4, 2));

-----9

name属性

ES6 对这个属性的行为做出了一些修改。如果将一个匿名函数赋值给一个变量,ES5 的name属性,会返回空字符串,而 ES6 的name属性会返回实际的函数名。

const bar = function baz() {};

// ES6
bar.name // "baz"

js lamda表达式

返回对象

 箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。

var getItem = id => ({id:id,name:"test"});
嵌套 lamda

箭头函数内部,还可以再使用箭头函数:

function insert(value) {
    return {into: function (array) {
            return {after: function (afterValue) {
                    array.splice(array.indexOf(afterValue) + 1, 0, value);
                    return array;
                }};
        }};
}

print(insert(2).into([1, 3]).after(1)); //[1, 2, 3]

let insert1 = (value) => ({into: (array) => ({after: (afterValue) => {
            array.splice(array.indexOf(afterValue) + 1, 0, value);
            return array;
        }})});

print(insert1(2).into([1, 3]).after(1)); //[1, 2, 3]

-----1,2,3
-----1,2,3

个部署管道机制(pipeline)的例子,即前一个函数的输出是后一个函数的输入。

const pipeline = (...funcs) =>
    val => funcs.reduce((a, b) => b(a), val);

const plus = a => a + 1;
const multi = a => a * 2;
const addThenMulti = pipeline(plus, multi);

print(addThenMulti(5));

const plus1 = a => a + 1;
const multi2 = a => a * 2;

print(multi2(plus1(5)));

-----12
-----12

猜你喜欢

转载自blog.csdn.net/Pengjx2014/article/details/89435310
今日推荐