Javascript 让声明变量=functionName()混淆

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声明很困惑:

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;