函数是一组一起执行一个任务的语句。
函数的定义
es5 定义函数的方法:
1 2 3 4 5 6 7 8
| function run() { return "run"; }
var run2 = function () { return "run2"; };
|
ts 中定义函数的方法:
1 2 3 4 5 6 7 8
| function run:string() { return "run"; }
var run2 = function:number () { return 123; };
|
ts 中定义方法传参:
1 2 3 4 5 6 7 8 9 10 11
| function getInfo(name: string, age: number): string { return `${name} --- ${age}`; }
console.log(getInfo("zhangsan", 20));
var getInfo2 = function (name: string, age: number): string { return `${name} --- ${age}`; };
console.log(getInfo2("zhangsan", 40));
|
没有返回值的方法:
1 2 3 4
| function run(): void { console.log("run"); } run();
|
方法可选参数
es5 里面方法的实参和行参可以不一样,但是 ts 中必须一样,如果不一样就需要配置可选参数
注意:可选参数必须配置到参数的最后面
1 2 3 4 5 6 7 8 9 10 11
| function getInfo(name: string, age?: number): string { if (age) { return `${name} --- ${age}`; } else { return `${name} ---年龄保密`; } }
console.log(getInfo("zhangsan"));
console.log(getInfo("zhangsan", 123));
|
默认参数 可选参数
es5 里面没法设置默认参数,es6 和 ts 中都可以设置默认参数。
1 2 3 4 5 6 7 8 9 10
| function getInfo(name: string, age: number = 20): string { if (age) { return `${name} --- ${age}`; } else { return `${name} ---年龄保密`; } }
console.log(getInfo("张三")); console.log(getInfo("张三", 30));
|
剩余参数
ts 中定义数组有三种方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function sum(...result: number[]): number { var sum = 0; for (var i = 0; i < result.length; i++) { sum += result[i]; } return sum; }
console.log(sum(1, 2, 3, 4, 5, 6));
function sum2(a: number, b: number, ...result: number[]): number { var sum = a + b;
for (var i = 0; i < result.length; i++) { sum += result[i]; }
return sum; }
console.log(sum2(1, 2, 3, 4, 5, 6));
|
ts 函数重载
java 中方法的重载:重载指的是两个或者两个以上同名函数,但它们的参数不一样,这时会出现函数重载的情况。
typescript 中的重载:通过为同一个函数提供多个函数类型定义来试下多种功能的目的。
ts 为了兼容 es5 以及 es6 重载的写法和 java 中有区别。
es5 中出现同名方法,下面的会替换上面的方法:
1 2 3 4 5 6 7 8
| function css(config) { return 1; }
function css(config, value) { return 2; } console.log(css());
|
ts 中的重载:
1 2 3 4 5 6 7 8 9 10 11 12 13
| function getInfo(name: string): string; function getInfo(name: string, age: number): string; function getInfo(name: any, age?: any): any { if (age) { return "我叫:" + name + "我的年龄是" + age; } else { return "我叫:" + name; } }
console.log(getInfo("zhangsan")); console.log(getInfo("zhangsan", 20)); console.log(getInfo(123));
|
箭头函数 es6
this 指向的问题:箭头函数里面的 this 指向上下文
1 2 3
| setTimeout(() => { alert("run"); }, 1000);
|