Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(()=>;{})而不是JavaScript函数表达式_Javascript_Typescript - Fatal编程技术网

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

(()=>;{})而不是JavaScript函数表达式,javascript,typescript,Javascript,Typescript,我正在学习打字脚本,却被其中一个主题“函数”所困扰 在这里,我浏览了子主题Lambdas并使用它 这里,当我使用普通函数表达式时,我得到了一个错误 let deck = { suits: ["hearts", "spades", "clubs", "diamonds"], cards: Array(52), createCardPicker: function() { return function() { let pickedCa

我正在学习打字脚本,却被其中一个主题“函数”所困扰

在这里,我浏览了子主题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);
但问题是我不知道第一个的问题是什么

我已经通过了考试

但我无法清楚地理解它


非常感谢您的解释。

您正在返回的函数中使用此

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


箭头函数从创建它的作用域中以词汇方式绑定
值。

您正在返回的函数中使用

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


arrow函数从创建它的作用域中以词汇形式绑定该值。

与以往一样,区别在于此,阅读有关arrow函数的MDN文档可能会有所帮助?当然,我会一直阅读ITA,不同之处在于,阅读MDN文档中的箭头函数可能会有所帮助?当然,我会看一遍,所以当我们使用箭头函数时,这里是createCardPicker作用域?所以当我们使用箭头函数时,这里是createCardPicker作用域?