TypeScript函数

发布时间:2024年01月04日

? ? ? ?

目录

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中的箭头用"->",而这里使用"=>",当然还有其他的一些区别不再说明。

文章来源:https://blog.csdn.net/www586089/article/details/135378498
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。