TypeScript 学习笔记 4 - function
回顾
接口:描述对象有哪些属性。
类:描述对象有哪些属性。
函数/方法:特殊的对象,可以被调用。
如果一个函数是一个东西的属性,它就是方法。
函数
function hi(){}
let hi2 = function(){} // 匿名函数
let hi3 = ()=>{} // 箭头函数
在 TypeScript 里的函数示例:
function hi(name:string, age:number=18):string|arguments{
if(age>18){
return 'hi';
}else{
return 404;
}
}
一个变量(如上面的 hi,hi1,hi2)永远存的是函数的地址而不是函数。
function hi(){
return 'hi'
}
hi = 123;
console.log(hi) // 123
this 和 arguments
任何函数都内置了 this 和 arguments。
function add(a:number, b:number = 1):number|string {
'use strict'
console.log(this)
console.log(arguments)
return a + b
}
function add(a:number, b:number):number {
// 上面是形式参数
return a + b
}
add(1,3)
// 上面是实际参数
function add(a:number,b:number):number{
console.log(arguments.length)
return arguments[0]+arguments[1]
}
function printThis(){
'use strict'
console.log(this)
console.log(arguments)
}
printThis(1,2)
this 非严格模式下默认是 window(在浏览器里) 或者是 global(在 node.js 里)。
this 在严格模式下默认是 undefined。
用了call,this 是什么一目了然。
printThis.call('this is this',1,2)
在一个对象里,谁调用函数,谁就是this。
let obj={
fn(){
console.log(this)
},
obj2:{
fn2(){
console.log(this)
}
}
}
obj.fn() // obj
obj.obj2.fn2() // obj2
let fn3 = obj.fn
fn3() // window,如果严格模式下是 undefined
重要的话
this 就是 call 的第一个参数。
fn(1,2)
// 等价于
fn.call(undefined, 1,2)
obj.fn(1,2)
// 等价于
obj.fn.call(obj, 1, 2)