在CoffeeScript中,我如何过滤掉全局数组而不意外地声明它?
In CoffeeScript, how can I filter out a global array without accidentally declaring it?
我对CoffeeScript很陌生,我一直在读这本书。有一个名为Select的部分讨论如何使用典型的函数式编程filter
函数。它说你可以这样做:
attacks = (attack for attack in attacks when attack is "a")
目的是过滤掉所有不等于"a"的元素。只要在同一文件中声明了attacks
,就可以正常工作。但是,如果我在另一个文件中声明了attacks
,像这样:
attacks = ["a", "b"]
root = exports ? this
root.attacks = attacks
然后第一个代码像这样编译:
function() {
var attack, attacks, _i, _len;
...
你会在for
循环中得到一个错误,说
TypeError: attacks is undefined
这种情况正在发生,我猜,因为CoffeeScript在=
的左侧看到了它不知道的东西,并决定需要声明它。
我怎样才能避免这种情况?
事实上,我已经想出了一个方法。那就是修改第一个代码片段,让它这样写:
root.attacks = (attack for attack in attacks when attack is "a")
这是一个好的解决方案吗?
Coffeescript将使用全局"window",如果你显式地告诉它。如果我是你,我会犹豫是否开始直接分配属性到窗口。至少你可以把它们放在一个窗口上的对象中,比如:window.globals = window.globals ? {}
然后window.globals.attacks = (attack for attack in attacks when attack is "a")
。对于更健壮的解决方案,您可以考虑以下内容:
window['moduleName'] = (->
someOtherVariableToExpose = 'something'
# All of your code
attacks: attacks
anotherThing: someOtherVariableToExpose)()
在javascript中看起来像:
window['moduleName'] = (function() {
var someOtherVariableToExpose;
var attacks;
someOtherVariableToExpose = 'something';
attacks = 'whatever your code defined it as';
return {
attacks: attacks,
anotherThing: someOtherVariableToExpose
};
})();
这将在该文件的所有私有代码周围创建一个漂亮的小闭包,并且只暴露window['moduleName']。['moduleName']. anotherthing .
如果你的应用会越来越大,你可以查看模块依赖库,如requires或browserify
编辑以确保立即调用匿名函数,因此返回的对象确实是所有暴露的。
是的,你的解决方案很好。Coffeescript将为你的引用创建一个局部变量,如果你没有从其他地方显式地把它们拉进来,所以你需要这样做。如果您知道此代码位于节点或浏览器中,则可以更明确地说window.attacks
或require()包含攻击的文件并以这种方式抓取它。
- node.js全局数组与redis
- 是socket.io异步的-我需要锁定全局数组/变量吗
- 如何在另一个函数调用中设置全局数组值
- 带有jquery .push的Javascript全局数组在备用函数中返回空数组
- 将对象插入到全局数组
- 在外部.js文件中使用全局php数组
- 从数组中删除元素,然后保留其状态以备将来使用,而不使用全局变量
- 从多个API请求推送到全局数组
- 如何在 JavaScript 中声明和初始化全局数组
- 如何使 Javascript 数组全局化
- 更改全局变量(数组)的 JavaScript 函数
- 无法使用 JavaScript 将值读入全局数组变量
- Javascript 全局数组无缘无故地变为未定义
- 使用Phonegap全局数组的Javascript不起作用
- 将 JSON 文件读取到对象的全局数组中 - 范围和同步问题
- 节点.js不能使用 promise、Mongoose 和 GET 请求推送到全局数组
- JS:正则表达式和全局匹配()不创建数组
- Javascript 全局数组在 JSON 结果函数中不可见
- 使谷歌地图标记数组全局中断标记点击事件
- AJAX使数组全局