TypeScript函数

       

目录

1、可选参数和默认参数

1.1、可选参数

1.2、默认参数

2、剩余参数

3、匿名函数 

3.1、不带参数匿名函数

 3.2、带参数匿名函数

3.3、匿名函数自调用

 4、构造函数

5、Lambda 函数

5.1、函数只有一行语句

5.2、函数是一个语句块

5.3、单个参数 () 是可选的 


        我们知道鸿蒙开发用的是ts语言(TypeScript),所以这里穿插介绍下ts的函数,主要介绍些与Java有差别或者特殊的地方。

1、可选参数和默认参数

        可选参数和默认参数在Java里面是没有这个概念的,但是如果了解Kotlin的话,对这个概念应该比较熟悉了。

1.1、可选参数

        在 TypeScript 函数里,如果我们定义了参数,则我们必须传入这些参数,除非将这些参数设置为可选,可选参数使用问号标识 ?。比如:

function buildName(firstName: string, lastName: string) {
    return firstName + " " + lastName;
}
 
let result1 = buildName("Bob");                  // 错误,缺少参数
let result2 = buildName("Bob", "Adams", "Sr.");  // 错误,参数太多了
let result3 = buildName("Bob", "Adams");         // 正确

        以下实例,我们将 lastName 设置为可选参数:

function buildName(firstName: string, lastName?: string) {
    if (lastName)
        return firstName + " " + lastName;
    else
        return firstName;
}
 
let result1 = buildName("Bob");  // 正确
let result2 = buildName("Bob", "Adams", "Sr.");  // 错误,参数太多了
let result3 = buildName("Bob", "Adams");  // 正确

        可选参数必须跟在必需参数后面。 如果上例我们想让 firstName 是可选的,lastName 必选,那么就要调整它们的位置,把 firstName 放在后面。

        如果都是可选参数就没关系。

1.2、默认参数

        我们也可以设置参数的默认值,这样在调用函数的时候,如果不传入该参数的值,则使用默认参数,语法格式为:

function function_name(param1[:type],param2[:type] = default_value) { 
}

注意:参数不能同时设置为可选和默认。

        以下实例函数的参数 rate 设置了默认值为 0.50,调用该函数时如果未传入参数则使用该默认值: 

function calculate_discount(price:number,rate:number = 0.50) { 
    var discount = price * rate; 
    console.log("计算结果: ",discount); 
} 
calculate_discount(1000) 
calculate_discount(1000,0.30)

        编译以上代码,得到以下 JavaScript 代码:

function calculate_discount(price, rate) {
    if (rate === void 0) { rate = 0.50; }
    var discount = price * rate;
    console.log("计算结果: ", discount);
}
calculate_discount(1000);
calculate_discount(1000, 0.30);

        输出结果:

2、剩余参数

         有一种情况,我们不知道要向函数传入多少个参数,这时候我们就可以使用剩余参数来定义。

        剩余参数语法允许我们将一个不确定数量的参数作为一个数组传入。

function buildName(firstName: string, ...restOfName: string[]) {
    return firstName + " " + restOfName.join(" ");
}
  
let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");

        函数的最后一个命名参数 restOfName 以 ... 为前缀,它将成为一个由剩余参数组成的数组,索引值从0(包括)到 restOfName.length(不包括)。

function addNumbers(...nums:number[]) {  
    var i;   
    var sum:number = 0; 
    
    for(i = 0;i<nums.length;i++) { 
       sum = sum + nums[i]; 
    } 
    console.log("和为:",sum) 
 } 
 addNumbers(1,2,3) 
 addNumbers(10,10,10,10,10)

        编译以上代码,得到以下 JavaScript 代码:

function addNumbers() {
    var nums = [];
    for (var _i = 0; _i < arguments.length; _i++) {
        nums[_i] = arguments[_i];
    }
    var i;
    var sum = 0;
    for (i = 0; i < nums.length; i++) {
        sum = sum + nums[i];
    }
    console.log("和为:", sum);
}
addNumbers(1, 2, 3);
addNumbers(10, 10, 10, 10, 10);

        输出结果为:

说明:剩余参数的概念在Java中对应到边长参数,逻辑含义一致,只是语法有些不一样。 

3、匿名函数 

        匿名函数是一个没有函数名的函数。匿名函数在程序运行时动态声明,除了没有函数名外,其他的与标准函数一样。我们可以将匿名函数赋值给一个变量,这种表达式就成为函数表达式。

        语法格式如下:

var res = function( [arguments] ) { ... }
3.1、不带参数匿名函数
var msg = function() { 
    return "hello world";  
} 
console.log(msg())

        编译以上代码,得到以下 JavaScript 代码:

var msg = function () {
    return "hello world";
};
console.log(msg());

        输出结果为:

 3.2、带参数匿名函数
var res = function(a:number,b:number) { 
    return a*b;  
}; 
console.log(res(12,2))

        编译以上代码,得到以下 JavaScript 代码:

var res = function (a, b) {
    return a * b;
};
console.log(res(12, 2));

        输出结果为:

3.3、匿名函数自调用

        匿名函数自调用在函数后使用 () 即可: 

(function () { 
    var x = "Hello!!";   
    console.log(x)     
 })()

        编译以上代码,得到以下 JavaScript 代码:

(function () { 
    var x = "Hello!!";   
    console.log(x)    
})()

        输出结果为:

说明:比较Java而言这个算是比较奇葩的语法,定义完自己然后瞬间又调用自己。 

 4、构造函数

        TypeScript 也支持使用 JavaScript 内置的构造函数 Function() 来定义函数:

        语法格式如下:

var res = new Function ([arg1[, arg2[, ...argN]],] functionBody)

参数说明:

  • arg1, arg2, ... argN:参数列表。
  • functionBody:一个含有包括函数定义的 JavaScript 语句的字符串。
var myFunction = new Function("a", "b", "return a * b"); 
var x = myFunction(4, 3); 
console.log(x);

        编译以上代码,得到以下 JavaScript 代码:

var myFunction = new Function("a", "b", "return a * b"); 
var x = myFunction(4, 3); 
console.log(x);

        输出结果为:

5、Lambda 函数

         Lambda 函数也称之为箭头函数。箭头函数表达式的语法比函数表达式更短。

5.1、函数只有一行语句
( [param1, param2,…param n] )=>statement;

        以下实例声明了 lambda 表达式函数,函数返回两个数的和:

var foo = (x:number)=>10 + x 
console.log(foo(100))      //输出结果为 110

        编译以上代码,得到以下 JavaScript 代码:

var foo = function (x) { return 10 + x; };
console.log(foo(100)); //输出结果为 110
5.2、函数是一个语句块
( [param1, param2,…param n] )=> {
 
    // 代码块
}

        以下实例声明了 lambda 表达式函数,函数返回两个数的和:

var foo = (x:number)=> {    
    x = 10 + x 
    console.log(x)  
} 
foo(100)

        编译以上代码,得到以下 JavaScript 代码:

var foo = function (x) {
    x = 10 + x;
    console.log(x);
};
foo(100);//输出结果110

        我们可以不指定函数的参数类型,通过函数内来推断参数类型:

var func = (x)=> { 
    if(typeof x=="number") { 
        console.log(x+" 是一个数字") 
    } else if(typeof x=="string") { 
        console.log(x+" 是一个字符串") 
    }  
} 
func(12) 
func("Tom")

        编译以上代码,得到以下 JavaScript 代码:

var func = function (x) {
    if (typeof x == "number") {
        console.log(x + " 是一个数字");
    }
    else if (typeof x == "string") {
        console.log(x + " 是一个字符串");
    }
};
func(12);
func("Tom");

        输出结果为:

5.3、单个参数 () 是可选的 
var display = x => { 
    console.log("输出为 "+x) 
} 
display(12)

        编译以上代码,得到以下 JavaScript 代码:

var display = function (x) {
    console.log("输出为 " + x);
};
display(12);//输出为12

        无参数时可以设置空括号:

var disp =()=> { 
    console.log("Function invoked"); 
} 
disp();

        编译以上代码,得到以下 JavaScript 代码:

var disp = function () {
    console.log("调用函数");
};
disp();

说明:Lambda函数在Java的JDK1.8得到支持,与这里的概念一致,但是写法有些不一样。Java中的箭头用"->",而这里使用"=>",当然还有其他的一些区别不再说明。

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值