(()=> {})而不是JavaScript函数表达式

时间:2016-09-08 11:46:52

标签: javascript typescript

我正在学习打字稿并陷入其中一个主题“功能”

我浏览了子主题 Lambdas并使用此

这里当我使用正常的函数表达式时,我得到了错误

let deck = {
    suits: ["hearts", "spades", "clubs", "diamonds"],
    cards: Array(52),
    createCardPicker: function() {
        return function() {
            let pickedCard = Math.floor(Math.random() * 52);
            let pickedSuit = Math.floor(pickedCard / 13);

            return {suit: this.suits[pickedSuit], card: pickedCard % 13};
        }
    }
}

let cardPicker = deck.createCardPicker();
let pickedCard = cardPicker();

alert("card: " + pickedCard.card + " of " + pickedCard.suit);

但是当我使用箭头语法(()=> {})而不是JavaScript函数表达式时,它的工作正常并且我正在进行警报

 let deck = {
        suits: ["hearts", "spades", "clubs", "diamonds"],
        cards: Array(52),
        createCardPicker: function() {
            // Notice: the line below is now a lambda, allowing us to capture 'this' earlier
            return () => {
                let pickedCard = Math.floor(Math.random() * 52);
                let pickedSuit = Math.floor(pickedCard / 13);

                return {suit: this.suits[pickedSuit], card: pickedCard % 13};
            }
        }
    }

    let cardPicker = deck.createCardPicker();
    let pickedCard = cardPicker();

    alert("card: " + pickedCard.card + " of " + pickedCard.suit);

但问题是我无法得到第一个问题

我已经完成了DOCS

但无法清楚地理解

感谢任何解释。

1 个答案:

答案 0 :(得分:3)

您在要返回的函数中使用this

通常,this的值取决于函数的调用方式。

箭头函数以词法方式绑定其创建范围内的this值。