在CoffeeScript 1.9.0 ChangeLog中,我读到了:
更改了内部编译器变量名称生成的策略。请注意,这意味着
@example
函数参数不再可用作函数体中的裸example
变量。
我不太明白这对我来说对用户意味着什么。这在某种程度上是一种不相容的变化吗?我可以安全地升级到1.9.0版本吗?
答案 0 :(得分:4)
这取决于。是的,这种变化是不相容的。如果你有书面测试,你可以检查它是否会影响你。拿一小段代码:
example = "new"
obj = method: (@example) -> console.log(example)
obj.method "old"
在1.8中,这将打印old
。在新版本中,这会打印new
。
在旧版本中,@example
将在方法参数中转换为example
。所以你在旧版本中访问obj.method
的函数参数
在新版本中,您正在访问外部作用域的example
变量。 1}}在这两种情况下仍然设置为a.example
。
在这里,您可以看到生成的JS代码的不同之处:
"old"
答案 1 :(得分:0)
请参阅Patrick J. S.的答案,了解变化的含义。
请参阅How do I find cases of CoffeeScript 1.9.0 breaking change in my code?了解如何安全升级,以及如果不能安全升级。