Javascript 让声明变量=functionName()混淆
我在读打字本手册的功能;我对let声明很困惑:Javascript 让声明变量=functionName()混淆,javascript,Javascript,我在读打字本手册的功能;我对let声明很困惑: let deck = { suits: ["hearts", "spades", "clubs", "diamonds"], cards: Array(52), createCardPicker: function() { // NOTE: the line below is now an arrow function, allowing us to capture 'this' right here return () =>
let deck = {
suits: ["hearts", "spades", "clubs", "diamonds"],
cards: Array(52),
createCardPicker: function() {
// NOTE: the line below is now an arrow function, allowing us to capture 'this' right here
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 +" "+ typeof(pickedCard)
+" "+ typeof(cardPicker));
下面的两个命令看起来完全相同,但当我打印出来时,cardPicker是一个“函数”,pickedCard是“对象”
如果我将第一个命令更改为:
let cardPicker = deck.createCardPicker;
cardPicker和pickedCard都是“功能”
任何人都可以提供更多的细节。谢谢
deck.createCardPicker()
调用createCardPicker()
后返回函数,在该函数下返回对象
如果只调用deck.createCardPicker
,它将返回函数
变量,但不执行实际函数
像
let cardPicker=deck.createCardPicker代码>//返回函数变量
现在如果你打电话
让pickedCard=cardPicker()
//执行函数并返回函数作为createCardPicker()
deck中提到的结果。createCardPicker()在调用createCardPicker()
后返回函数,并在该函数下返回对象
如果只调用deck.createCardPicker
,它将返回函数
变量,但不执行实际函数
像
let cardPicker=deck.createCardPicker代码>//返回函数变量
现在如果你打电话
让pickedCard=cardPicker()
//执行函数并返回函数,作为执行时createCardPicker()
中提到的结果let cardPicker=deck.createCardPicker()代码>您正在调用createCardpicker函数,因此cardPicker变量现在是它的结果-它恰好是您返回的arrow函数。但是,当您执行时,让cardPicker=deck.createCardPicker代码>您只是在为该方法创建别名。通过这种方式调用cardPicker将返回arrow函数,因此pickerCard将是arrow函数,而不是您要返回的对象代码>您正在调用createCardpicker函数,因此cardPicker变量现在是它的结果-它恰好是您返回的arrow函数。但是,当您执行时,让cardPicker=deck.createCardPicker代码>您只是在为该方法创建别名。这样调用cardPicker将返回arrow函数,因此pickerCard将是arrow函数,而不是您要返回的对象
let cardPicker = deck.createCardPicker;