函数的定义
es5 定义函数的方法
函数声明法
1 2 3
| function run() { return "run"; }
|
匿名函数
1 2 3
| var run2 = function () { return "run2"; };
|
ts 中定义函数的方法
函数声明法
1 2 3
| function run(): string { return "run"; }
|
错误写法
1 2 3
| function run(): string { return 123; }
|
匿名函数
1 2 3 4 5
| var fun2 = function (): number { return 123; };
alert(fun2());
|
ts 中定义方法传参
1 2 3 4 5
| function getInfo(name: string, age: number): string { return `${name} --- ${age}`; }
alert(getInfo("zhangsan", 20));
|
1 2 3 4 5
| var getInfo = function (name: string, age: number): string { return `${name} --- ${age}`; };
alert(getInfo("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} ---年龄保密`; } }
alert(getInfo("zhangsan"));
alert(getInfo("zhangsan", 123));
|
注意:可选参数必须配置到参数的最后面
错误写法
1 2 3 4 5 6 7 8 9
| function getInfo(name?: string, age: number): string { if (age) { return `${name} --- ${age}`; } else { return `${name} ---年龄保密`; } }
alert(getInfo("zhangsan"));
|
默认参数
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} ---年龄保密`; } }
alert(getInfo("张三", 30));
|
剩余参数
1 2 3 4 5
| function sum(a: number, b: number, c: number, d: number): number { return a + b + c + d; }
alert(sum(1, 2, 3, 4));
|
三点运算符
接受新参传过来的值
1 2 3 4 5 6 7 8 9 10 11
| function sum(...result: number[]): number { var sum = 0;
for (var i = 0; i < result.length; i++) { sum += result[i]; }
return sum; }
alert(sum(1, 2, 3, 4, 5, 6));
|
1 2 3 4 5 6 7 8 9 10 11
| function sum(a: number, b: number, ...result: number[]): number { var sum = a + b;
for (var i = 0; i < result.length; i++) { sum += result[i]; }
return sum; }
alert(sum(1, 2, 3, 4, 5, 6));
|
ts 函数重载
java 中方法的重载:重载指的是两个或者两个以上同名函数,但它们的参数不一样,这时会出现函数重载的情况。
typescript 中的重载:通过为同一个函数提供多个函数类型定义来试下多种功能的目的。
ts 为了兼容 es5 以及 es6 重载的写法和 java 中有区别。
es5 中出现同名方法,下面的会替换上面的方法
1 2 3
| function css(config) {}
function css(config, value) {}
|
ts 中的重载
1
| function getInfo(name: string): string;
|
1
| function getInfo(age: number): string;
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| function getInfo(str: any): any { if (typeof str === "string") { return "我叫:" + str; } else { return "我的年龄是" + str; } }
alert(getInfo("张三"));
alert(getInfo(20));
alert(getInfo(true));
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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; } }
alert(getInfo("zhangsan"));
alert(getInfo(123));
alert(getInfo("zhangsan", 20));
|
箭头函数 es6
this 指向的问题 箭头函数里面的 this 指向上下文
1 2 3
| setTimeout(function () { alert("run"); }, 1000);
|
1 2 3
| setTimeout(() => { alert("run"); }, 1000);
|