gpt4 book ai didi

node.js - Coffeescript resetCards 不是函数

转载 作者:搜寻专家 更新时间:2023-10-31 23:30:37 24 4
gpt4 key购买 nike

我一直在 nodejs 上运行 coffeescript 和 expressjs,我正在制作一个小脚本来给你 9 张随机扑克牌(没有重复),我做了一个函数 resetCards 来在每次显示后重置卡片,但是当我运行它给我的脚本:

TypeError: resetCards is not a function
at Object.<anonymous> (/home/zunon/projects/xKoot/router.js:10:1)
at Module._compile (module.js:398:26)
at Object.Module._extensions..js (module.js:405:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/home/zunon/projects/xKoot/xkoot.js:6:10)
at Module._compile (module.js:398:26)
at Object.Module._extensions..js (module.js:405:10)

这是文件 router.coffee:

express = require 'express'
router = express.Router()

cards = []

resetCards()

router.route '/randomcard'
.get (req, res) ->
cardNames = []
for i in [1..9] by 1
cardNames[i] = createCardName()
console.log cardNames
res.render 'randomcard', {cardNames}
return

createCardName = ->
position = Math.floor Math.random() * cards.length
cards.splice position, 1
cards[position]

resetCards = ->
for i in [1..13] by 1
cards[i - 1] = "club#{i}"
cards[i + 12] = "dmnd#{i}"
cards[i + 25] = "hart#{i}"
cards[i + 38] = "spad#{i}"
if i < 3
cards[i + 51] = "joke#{i}"

module.exports = router

最佳答案

CoffeeScript 不会像 JavaScript 那样将函数提升到作用域的顶部。在 JavaScript 中,如果你说:

f();
function f() { }

它将起作用,因为 f 的定义被提升到顶部,因此代码等效于:

function f() { }
f();

但是,CoffeeScript 仅将声明 提升到顶部,而不是定义。所以当在 CoffeeScript 中这样说时:

f()
f = ->

在 JavaScript 中看起来像这样:

var f;
f();
f = function() { };

所以 f 在被调用时是 undefined 并且你得到一个 TypeError

解决方案是将您的 resetCards() 调用放在 resetCards 的定义之下:

resetCards = ->
for i in [1..13] by 1
cards[i - 1] = "club#{i}"
cards[i + 12] = "dmnd#{i}"
cards[i + 25] = "hart#{i}"
cards[i + 38] = "spad#{i}"
if i < 3
cards[i + 51] = "joke#{i}"

resetCards()

另一种看待它的方式是认识到这个 CoffeeScript:

f = ->

与此 JavaScript 相同:

var f;
f = function() { };

但这并不完全相同:

function f() { }

CoffeeScript 中没有与 function f() { } 等价的东西。

关于node.js - Coffeescript resetCards 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34799215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com