这是一个列表理解泄漏咖啡脚本中变量名称的错误吗?
Is this a bug that list comprehenstion leak a variable name in coffeescript?
在学习咖啡脚本时,我发现:
people = ("'#{name}'" for name in ['Foo', 'Bar', 'Baz'])
编译到这个
(function() {
var name, people;
people = (function() {
var _i, _len, _ref, _results;
_ref = ['Foo', 'Bar', 'Baz'];
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
name = _ref[_i];
_results.push("'" + name + "'");
}
return _results;
})();
}).call(this);
这是一个可以在列表推导之外访问名称的错误吗?(我使用咖啡脚本 1.4.0)。
来自精细手册:
词汇范围界定和变量安全
CoffeeScript 编译器注意确保所有变量都在词法范围内正确声明 — 您永远不需要自己编写
var
。[一些示例代码]
请注意,所有变量声明在第一次出现时都被推到最接近范围的顶部。
当你说:
for name ....
您隐式声明了name
变量,该变量将像任何其他变量一样提升到范围的顶部。推导不是定义为函数或新作用域,它碰巧使用function
实现的事实只是一个实现细节(这只是为了限制内部_i
的作用域,_len
,_ref
,_results
CoffeeScript用来实现推导的变量)。
一个错误,你只是看到(Coffee|Java)脚本。
相关文章:
- AngularJS-在JSON选择器中使用变量名
- 命令行中的Uglify js;不要弄乱变量名
- 像createComment这样的各种自定义变量名在内联javascript中被覆盖,但在外部js中没有.为什么?
- 这在JavaScript中是一个好的变量名吗
- 在javascript中,在变量名之前使用var有什么区别/优势吗
- 在Javascript中连接一个动态变量名
- 如何使用jQuery循环变量名
- JavaScript将字符串转换为变量名
- 根据发送到javascript中函数的参数创建变量名
- 检索本身包含变量的 Jquery 变量名的值
- 测试JavaScript是否符合异常变量名
- 动态变量名语法
- 动态jQuery变量名
- jquery没有't从DIV数据id中获取PHP变量值,只输出变量名
- Ajax jquery post发布时没有变量名
- 在javascript中的现有变量名中添加一个变量
- 可以't让JavaScript将ID读取为变量名
- ng绑定html,变量名来自ng repeat,但在其他地方定义了变量
- 使用动态变量名更新JSON中的结果
- 如何在javascript中访问函数内部的相同变量名