Zun*_*non 3 compiler-errors node.js coffeescript express
我一直在运行coffeescript和nodejs上的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)
Run Code Online (Sandbox Code Playgroud)
这是文件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
Run Code Online (Sandbox Code Playgroud)
CoffeeScript不像JavaScript那样将功能提升到范围的顶部.在JavaScript中,如果你说:
f();
function f() { }
Run Code Online (Sandbox Code Playgroud)
它会起作用,因为它的定义f被提升到顶部,因此代码相当于:
function f() { }
f();
Run Code Online (Sandbox Code Playgroud)
但是,CoffeeScript仅将声明提升到顶部,而不是定义.所以当在CoffeeScript中这样说时:
f()
f = ->
Run Code Online (Sandbox Code Playgroud)
它在JavaScript中看起来像这样:
var f;
f();
f = function() { };
Run Code Online (Sandbox Code Playgroud)
所以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()
Run Code Online (Sandbox Code Playgroud)
另一种看待它的方法是认识到这个CoffeeScript:
f = ->
Run Code Online (Sandbox Code Playgroud)
与此JavaScript相同:
var f;
f = function() { };
Run Code Online (Sandbox Code Playgroud)
但那并不完全相同:
function f() { }
Run Code Online (Sandbox Code Playgroud)
function f() { }在CoffeeScript中没有相同的东西.
| 归档时间: |
|
| 查看次数: |
1816 次 |
| 最近记录: |