【第6篇】TypeScript函数function的案例代码详解

2019-06-08  本文已影响0人  爱学习的蹭蹭

1、最简单function函数

/*******声明一个add方法********/
function add(x: number, y: number): number {
    return x+y;
}
/*******声明一个myAdd1方法********/
var myAdd1 = function(x: number, y: number): number { 
    return x+y; 
};

/*******声明一个myAdd2方法********/
//现在我们已经输入的功能,让我们写了完整类型的功能出来
//通过查看每件功能类型。
var myAdd2: (x:number, y:number)=>number = function(x: number, y: number): number {
    return x+y;  
};
var number3=myAdd2(1,3);
$(function () { 
    var number1=add(1,2);
    var number2=myAdd1(1,2);
    $("#msg1").html("<span style='color:red;'>"+number1+"</span>");
    $("#msg2").html("<span style='color:red;'>"+number2+"</span>");
    $("#msg3").html("<span style='color:red;'>"+number3+"</span>");
});
/*******声明一个add方法********/
function add(x, y) {
    return x + y;
}

/*******声明一个myAdd1方法********/
var myAdd1 = function (x, y) {
    return x + y;
};

/*******声明一个myAdd2方法********/
//现在我们已经输入的功能,让我们写了完整类型的功能出来
//通过查看每件功能类型。
var myAdd2 = function (x, y) {
    return x + y;
};
var number3 = myAdd2(1, 3);
$(function () {
    var number1 = add(1, 2);
    var number2 = myAdd1(1, 2);
    $("#msg1").html("<span style='color:red;'>" + number1 + "</span>");
    $("#msg2").html("<span style='color:red;'>" + number2 + "</span>");
    $("#msg3").html("<span style='color:red;'>" + number3 + "</span>");
});
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="../../plugins/jquery-2.1.4.min.js"></script>
<script src="../test-1.js" type="text/javascript"></script>
</head>
<body>
<div id="msg1"></div>
<br/>
<div id="msg2"></div>
<br/>
<div id="msg3"></div>
</body>

2、函数其余的参数

/**
 * 一、function没有返回值,却返回了,虽然在写function的的时候不报错,
* 调用的时候就报Error
 * 不像JavaScript中,在打字稿每参数的函数被假定为所要求的功能。
 * 这并不意味着它不是一个“空”值,
 * 而是,当函数调用编译器将检查该用户已经提供了对每个参数的值。
 * 编译器还假定这些参数是将被传递给函数的唯一参数。
 * 总之,参数的函数的数目必须匹配的参数的函数需要的数量。
 */
function buildName1(firstName: string, lastName: string) {
    return firstName + " " + lastName;
}
//var result1 = buildName1("Bob");  //error, too few parameters
//var result2 = buildName1("Bob", "Adams", "Sr.");  //error, too many parameters
//var result3 = buildName1("Bob", "Adams");  //ah, just right

/**
 * Rest parameters
 * 其余的参数
 * 在JavaScript中,每一个参数被认为是可选的,用户可以不用管它,
 * 因为他们认为合适的。当他们这样做,他们认为是不确定的。
 *我们可以通过使用得到打字稿这个功能'?“旁边的参数,我们想要可选。
//例如,我们说,我们要的姓氏是可选:
 */
function buildName2(firstName: string, lastName?: string) {
    if (lastName)
        return firstName + " " + lastName;
    else
        return firstName;
}

var result1 = buildName2("Bob");  //works correctly now
//var result2 = buildName2("Bob", "Adams", "Sr.");  //error, too many parameters
var result3 = buildName2("Bob", "Adams");  //ah, just right
/**
 * 必需,可选和默认参数都有一个共同点:他们大约在同一时间谈论一个参数。
* 有时候,你想与多个参数的工作作为一个群体 或者你可能不知道有多少参数的函 数将最终取,
//在JavaScript中,你可以使用的参数变量,它是每一个函数体中可见
 * 在TypeScript:您可以收集这些参数汇集成一个变量
 */
function buildName3(firstName: string, ...restOfName: string[]) {
    return firstName + " " + restOfName.join(" ");
}
var employeeName = buildName3("Joseph", "Samuel", "Lucas", "MacKinzie");
/**
 * Rest parameters
 * 其余的参数都被视为可选参数无边号码。你可能会离开他们,或者你想要的。
 * 编译器将建立你的下省略号(...)
 * 后给予的名称传递给函数的参数数组,允许你使用它在你的函数
 */
function buildName4(firstName: string, ...restOfName: string[]) {
    return firstName + " " + restOfName.join(" ");
}
var buildNameFun: (fname: string, ...rest: string[])=>string = buildName4;
/**
 * 一、function没有返回值,却返回了,虽然在写function的的时候不报错,调用的时候就报Error
 * 不像JavaScript中,在打字稿每参数的函数被假定为所要求的功能。这并不意味着它不是一个“空”值,
 * 而是,当函数调用编译器将检查该用户已经提供了对每个参数的值。编译器还假定这些参数是将被传递给函数的唯一参数。
 * 总之,参数的函数的数目必须匹配的参数的函数需要的数量。
 */

function buildName1(firstName, lastName) {
    return firstName + " " + lastName;
}

//var result1 = buildName1("Bob");  //error, too few parameters
//var result2 = buildName1("Bob", "Adams", "Sr.");  //error, too many parameters
//var result3 = buildName1("Bob", "Adams");  //ah, just right

/**
 * Rest parameters
 * 其余的参数
 * 在JavaScript中,每一个参数被认为是可选的,用户可以不用管它,因为他们认为合适的。当他们这样做,他们认为是不确定的。
 * 我们可以通过使用得到打字稿这个功能'?“旁边的参数,我们想要可选。例如,我们说,我们要的姓氏是可选:
 */
function buildName2(firstName, lastName) {
    if (lastName)
        return firstName + " " + lastName;
    else
        return firstName;
}

var result1 = buildName2("Bob"); //works correctly now
//var result2 = buildName2("Bob", "Adams", "Sr.");  //error, too many parameters
var result3 = buildName2("Bob", "Adams"); //ah, just right
/**
 * 必需,可选和默认参数都有一个共同点:他们大约在同一时间谈论一个参数。有时候,你想与多个参数的工作作为一个群体
 * 或者你可能不知道有多少参数的函数将最终取,在JavaScript中,你可以使用的参数变量,它是每一个函数体中可见
 * 在TypeScript:您可以收集这些参数汇集成一个变量
 */
function buildName3(firstName) {
    var restOfName = [];
    for (var _i = 1; _i < arguments.length; _i++) {
        restOfName[_i - 1] = arguments[_i];
    }
    return firstName + " " + restOfName.join(" ");
}
var employeeName = buildName3("Joseph", "Samuel", "Lucas", "MacKinzie");
/**
 * Rest parameters
 * 其余的参数都被视为可选参数无边号码。你可能会离开他们,或者你想要的。编译器将建立你的下省略号(...)
 * 后给予的名称传递给函数的参数数组,允许你使用它在你的函数
 */
function buildName4(firstName) {
    var restOfName = [];
    for (var _i = 1; _i < arguments.length; _i++) {
        restOfName[_i - 1] = arguments[_i];
    }
    return firstName + " " + restOfName.join(" ");
}
var buildNameFun = buildName4;

3、函数this关键字

**
 * this的使用..
 *在 JavaScript,this的变量一个函数被调用的变量。这使得它成为非常强大和灵活的功能,
 *但它是在总是具有了解,一个功能被执行的情况下的成本。这可以是出了名的混乱,例如,当一个函数被用作一个回调。
 */
function getMeMsg1():void{ 
    var suits1=["hearts", "spades", "clubs", "diamonds"];
    var deck1 = {
        suits:suits1,
        cards: Array(52),
        createCardPicker: function() {
            return function() {
                var pickedCard = Math.floor(Math.random() * 52);
                var pickedSuit = Math.floor(pickedCard / 13);
                return {suit: this.suits[pickedSuit], card: pickedCard % 13};
            }
        }
    }

    var cardPicker1 = deck1.createCardPicker();
    var pickedCard1 = cardPicker1();
    alert("card1: " + pickedCard1.card + " of " + pickedCard1.suit);
}
/**
 * 我们可以通过确保修复此功能被绑定到正确的'this'之前,我们返回函数供以后使用。这样一来,
 * 不管如何其以后使用时,它仍可以看到原来的“甲板”对象
 * 为了解决这个问题,我们切换函数表达式使用lambda语法(()=>{}),而不是JavaScript函数表达式。
 * 这将自动捕捉“这个”可被创建,而不是被调用时,它的功能时:
 */
function getMeMsg2():void{  
    var deck2 = {
        suits: ["hearts", "spades", "clubs", "diamonds"],
        cards: Array(52),
        createCardPicker: function() {
            //使用lambda表达式去捕捉this用法.
            return () => {
                var pickedCard = Math.floor(Math.random() * 52);
                var pickedSuit = Math.floor(pickedCard / 13);
                console.log(this.suits[pickedSuit]);
                console.log(pickedCard % 13);
                return {suit: this.suits[pickedSuit], card: pickedCard % 13};
            }
        }
    }
    var cardPicker2 = deck2.createCardPicker();
    var pickedCard2 = cardPicker2();
    alert("card2: " + pickedCard2.card + " of " + pickedCard2.suit);
}
$(function(){ 
    getMeMsg2();
});
/**
 * this的使用..
 *在 JavaScript,this的变量一个函数被调用的变量。这使得它成为非常强大和灵活的功能,
 *但它是在总是具有了解,一个功能被执行的情况下的成本。这可以是出了名的混乱,例如,当一个函数被用作一个回调。
 */
function getMeMsg1() {
    var suits1 = ["hearts", "spades", "clubs", "diamonds"];
    var deck1 = {
        suits: suits1,
        cards: Array(52),
        createCardPicker: function () {
            return function () {
                var pickedCard = Math.floor(Math.random() * 52);
                var pickedSuit = Math.floor(pickedCard / 13);
                return { suit: this.suits[pickedSuit], card: pickedCard % 13 };
            };
        }
    };
    var cardPicker1 = deck1.createCardPicker();
    var pickedCard1 = cardPicker1();
    alert("card1: " + pickedCard1.card + " of " + pickedCard1.suit);
}

/**
 * 我们可以通过确保修复此功能被绑定到正确的'this'之前,我们返回函数供以后使用。这样一来,
 * 不管如何其以后使用时,它仍可以看到原来的“甲板”对象
 * 为了解决这个问题,我们切换函数表达式使用lambda语法(()=>{}),而不是JavaScript函数表达式。
 * 这将自动捕捉“这个”可被创建,而不是被调用时,它的功能时:
 */

function getMeMsg2() {
    var deck2 = {
        suits: ["hearts", "spades", "clubs", "diamonds"],
        cards: Array(52),
        createCardPicker: function () {
            var _this = this;
            //使用lambda表达式去捕捉this用法.
            return function () {
                var pickedCard = Math.floor(Math.random() * 52);
                var pickedSuit = Math.floor(pickedCard / 13);
                console.log(_this.suits[pickedSuit]);
                console.log(pickedCard % 13);
                return { suit: _this.suits[pickedSuit], card: pickedCard % 13 };
            };
        }
    };
    var cardPicker2 = deck2.createCardPicker();
    var pickedCard2 = cardPicker2();
    alert("card2: " + pickedCard2.card + " of " + pickedCard2.suit);
}

$(function () {
    getMeMsg2();

});

4、Any与Void函数

/**
 *JavaScript是本质上是一种非常好的动态的语言。这并意味都通用的一个JavaScript函数返回基于对传入的参数的形状不同类型的对象。
 */
var suits = ["hearts", "spades", "clubs", "diamonds"];
//--实例一
function getThisMsgs1():void{ 
        function pickCard1(x): any {
        // 判断这个x是不是object/array
        if (typeof x == "object") {
            var pickedCard = Math.floor(Math.random() * x.length);
            return pickedCard;
        }
        //  判断
        else if (typeof x == "number") {
            var pickedSuit = Math.floor(x / 13);
            return { suit: suits[pickedSuit], card: x % 13 };
        }
    }

    var myDeck1 = [{ suit: "diamonds", card: 2 }, { suit: "spades", card: 10 }, { suit: "hearts", card: 4 }];
    var pickedCard1 = myDeck1[pickCard1(myDeck1)];
    alert("card: " + pickedCard1.card + " of " + pickedCard1.suit);
    var pickedCard2 = pickCard1(15);
    alert("card: " + pickedCard2.card + " of " + pickedCard2.suit);
    }

//--实例二
function getThisMsgs2():void{  
    function pickCard(x: {suit: string; card: number; }[]): number;
    function pickCard(x: number): {suit: string; card: number; };
    function pickCard(x): any {
        // Check to see if we're working with an object/array
        // if so, they gave us the deck and we'll pick the card
        if (typeof x == "object") {
            var pickedCard = Math.floor(Math.random() * x.length);
            return pickedCard;
        }

        // Otherwise just let them pick the card
        else if (typeof x == "number") {
            var pickedSuit = Math.floor(x / 13);
            return { suit: suits[pickedSuit], card: x % 13 };
        }
    }
   
    var myDeck = [{ suit: "diamonds", card: 2 }, { suit: "spades", card: 10 }, { suit: "hearts", card: 4 }];
    var pickedCard1 = myDeck[pickCard(myDeck)];
    alert("card: " + pickedCard1.card + " of " + pickedCard1.suit);
    var pickedCard2 = pickCard(15);
    alert("card: " + pickedCard2.card + " of " + pickedCard2.suit);
}
$(function(){ 
    getThisMsgs2();   
});
 
/**
 *
 *JavaScript是本质上是一种非常好的动态的语言。这并意味都通用的一个JavaScript函数返回基于对传入的参数的形状不同类型的对象。
 */
var suits = ["hearts", "spades", "clubs", "diamonds"];
//--实例一

function getThisMsgs1() {
    function pickCard1(x) {
        // 判断这个x是不是object/array
        if (typeof x == "object") {
            var pickedCard = Math.floor(Math.random() * x.length);
            return pickedCard;
        }

        else if (typeof x == "number") {
            var pickedSuit = Math.floor(x / 13);
            return { suit: suits[pickedSuit], card: x % 13 };
        }
    }

    var myDeck1 = [{ suit: "diamonds", card: 2 }, { suit: "spades", card: 10 }, { suit: "hearts", card: 4 }];
    var pickedCard1 = myDeck1[pickCard1(myDeck1)];
    alert("card: " + pickedCard1.card + " of " + pickedCard1.suit);
    var pickedCard2 = pickCard1(15);
    alert("card: " + pickedCard2.card + " of " + pickedCard2.suit);
}

//--实例二
function getThisMsgs2() {
    function pickCard(x) {
        // Check to see if we're working with an object/array
        // if so, they gave us the deck and we'll pick the card
        if (typeof x == "object") {
            var pickedCard = Math.floor(Math.random() * x.length);
            return pickedCard;
        }
        else if (typeof x == "number") {
            var pickedSuit = Math.floor(x / 13);
            return { suit: suits[pickedSuit], card: x % 13 };
        }
    }

    var myDeck = [{ suit: "diamonds", card: 2 }, { suit: "spades", card: 10 }, { suit: "hearts", card: 4 }];
    var pickedCard1 = myDeck[pickCard(myDeck)];
    alert("card: " + pickedCard1.card + " of " + pickedCard1.suit);
    var pickedCard2 = pickCard(15);
    alert("card: " + pickedCard2.card + " of " + pickedCard2.suit);
}
$(function () {
    getThisMsgs2();
});

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="../../plugins/jquery-2.1.4.min.js"></script>
<script src="../test-3.js" type="text/javascript"></script>
<script src="../test-4.js" type="text/javascript"></script>
</head>
<body>
<div id="msg1"></div>
<br/>
<div id="msg2"></div>
<br/>
<div id="msg3"></div>
</body>
</html>

工程源代码

TypeScript函数function的案例代码详解

博客所有文章是本人2014年撰写,而GItHub的源代码是有些是2014年与2015年进行整理,由于在2013年项目接触TypeScript,同时在当年接触KendoUI开发的时候TypeScript的影子,故一年后决定把官方文档所有API文档认真琢磨了一遍,并且撰写成一本最全的中文TypeScript入门指南详解案例教程与代码,当初的下载量还是比较高的。由于最近接触Kotlin,自从学习TypeScript,它的语法对我后面学习Kotlin有了极大的帮助,个人感觉,它的语法跟ActionScript,Swift写法很像。故虽然好几年没怎么开发前端,由于它的重要性特意重新花点进行整理这门前端语言。

上一篇下一篇

猜你喜欢

热点阅读