TS 函数新特性

2017-10-24  本文已影响0人  __凌

# 1:rest and spread操作符 --- ...args


No 1 : 用来声明任意数量的方法参数

function test(...args) {

args.forEach(function (arg) {

console.log(arg)

})

};

test(1, 2, 3, 4);

//打印1,2,3,4

转JS:

function test() {

var args = [];

for (var _i = 0; _i < arguments.length; _i++) {

args[_i] = arguments[_i];

}

args.forEach(function (arg) {

console.log(arg);

});

};

test(1, 2, 3, 4);

No 2:也可以对声明了固定数量参数的函数进行参数数量不等的调用

function test(a,b,c) {

console.log(a);

console.log(b);

console.log(c);

};

var arr = [1, 2];

test(...arr);//打印1,2,undefined

var arr2 = [1, 2, 3, 4, 5, 6];

test(...arr2);//只识别前三个参数,打印1,2,3


# 2:generator函数


No 1:控制函数的执行过程

No 2:通过function*声明一个generator函数在函数中添加yield和next()可对其进行打断和分布执行操作

function* test(){

console.log("start");

yield;

console.log("finish");

}

var fun1 = test();   //须将函数声明为变量使用此方法

fun1.next();

fun1.next();

每个.next()执行yield分割的一段代码,第一个fun1.next();执行至yield之前停止打印出"start",第二个fun1.next()执行之后的代码,打印出"finish"


# 3:destructuring 析构表达式


No 1:通过表达式将对象或数组拆解成任意数量的变量

function fun() {

    return {

        title:"xxj",

        total:36

   }

}

var { title , total } =fun(); //变量名与函数中的属性名对应相同

var { title :name , total } =fun(); // 或者起个别名

console.log(title);

console.log(name);

这句话等价于  如下:

var aa =fun();

var title = aa.title;

var total = aa.total;

No 2:析构表达式的嵌套  --- 从对象拆值

function fun() {

   return {

       title:"xxj",

        total:{

              total1:25,

              total2:57

       }

   }

}

var { title , total:{ total2 } } =fun();

console.log(total2);

No 3:析构表达式的嵌套  --- 从数组拆值

var arr = [1,2,3,4];

var [num1,num2]=arr;

console.log(num1,num2);    //1 2

var [,,num3,num4]=arr;

console.log(num3,num4);     //3 4 用逗号空出对应位置即可跳跃取值

var [num5,,num6]=arr;

console.log(num5,num6);    //1 3

var [num7,...others]=arr;

console.log(num7,others);  //1 [2,3,4] *此时将剩余的三个数打包放进others中

上一篇 下一篇

猜你喜欢

热点阅读