我正在学习打字稿并陷入其中一个主题“功能”
我浏览了子主题 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
但无法清楚地理解
感谢任何解释。
答案 0 :(得分:3)
您在要返回的函数中使用this
。
通常,this
的值取决于函数的调用方式。
箭头函数以词法方式绑定其创建范围内的this
值。