你可以使用反引号将纯 JavaScript 注入到 CoffeeScript 中:
outer=1
f=->
local=1
`var outer=0`
local+outer
在大多数情况下,我会尽量避免这种情况,而是更愿意重命名外部变量,在它们的名称中指明它们的范围/上下文。但是,有时这很有帮助,例如,在使用调试模块时,我总是希望有一个debug()
可用于日志记录的函数,如下例所示:
#logging fn for module setup and other global stuff
debug = require("debug")("foo")
class Bar
#local logging fn to allow Bar instances to log stuff
`var debug = require("debug")("foo:bar")`
如果你想至少保持纯 JS,只需声明变量,然后使用 CoffeeScript 赋值:
`var debug`; debug = require("debug") "foo:bar"
该示例编译为:
// Generated by CoffeeScript 1.7.1 -- removed empty lines for SO answer
var Bar, debug;
debug = require("debug")("foo");
Bar = (function() {
function Bar() {}
var debug;
debug = require("debug")("foo:bar");
return Bar;
})();
我喜欢这种直接声明变量的方式,而不是(恕我直言)更慢且可读性更低的 IIFE hack。