【发布时间】:2015-11-09 13:10:59
【问题描述】:
我想切换到 Coffeescript 有一段时间了,昨天我以为我终于被卖掉了,但后来我偶然发现了 Armin Ronachers article 关于 Coffeescript 的影子。
Coffeescript 现在确实放弃了阴影,如果您对嵌套循环使用相同的迭代器,该问题的一个示例就是。
var arr, hab, i;
arr = [[1, 2], [1, 2, 3], [1, 2, 3]];
for(var i = 0; i < arr.length; i++){
var subArr = arr[i];
(function(){
for(var i = 0; i < subArr.length; i++){
console.log(subArr[i]);
}
})();
}
因为 cs 仅在我无法在咖啡脚本中执行此操作时才声明变量
阴影已被有意移除,我想了解为什么 cs 的作者想要摆脱这样的功能?
更新:这里是 better example,说明为什么影子很重要,源自与此问题有关的问题 on github
PS:我不是在寻找一个答案,告诉我我可以插入带有反引号的纯 Javascript。
【问题讨论】:
-
这是一个功能吗?应始终避免使程序员感到困惑或更容易出错的事情。没有?
-
没有明确声明,解释器怎么知道你的两个
i变量是否应该是同一个? -
@Alnitak 这正是我的观点,在 cs 之前,您可以通过
while i := 0隐藏变量 -
更令人困惑的是,这种没有阴影甚至不一致。如果您有多个文件,变量将被文件隐藏(除非明确设置为全局范围)。在这种情况下,函数参数会隐藏其他变量,但是在这个函数内部使用另一个变量不会隐藏任何其他同名变量。总的来说,CoffeeScript 反对影子,因为他们不知道自己在做什么。当 Ashkenas 说这是“一个巨大的概念简化”时,我听到“很难正确实施”。
-
尽管使用了超过 50,000 行的咖啡脚本,但我从未被您描述的问题所困扰。我建议,如果这引起了问题,那么它表明存在更深层次的架构问题。