CoffeeScript 1.9.0对变量名的更改

CoffeeScript 1.9.0对变量名的更改,coffeescript,Coffeescript,在报告中,我读到: 更改了生成内部编译器变量名的策略。请注意,这意味着@example函数参数不再作为函数体中的裸示例变量可用 作为一个用户,我不太明白这对我意味着什么。这是一种不相容的变化吗?我可以安全地升级到1.9.0版吗?视情况而定。是的,此更改不兼容。如果你有书面测试,你可以检查它是否影响你。以这段代码为例: example = "new" obj = method: (@example) -> console.log(example) obj.method "old" 在1.8

在报告中,我读到:

更改了生成内部编译器变量名的策略。请注意,这意味着@example函数参数不再作为函数体中的裸示例变量可用


作为一个用户,我不太明白这对我意味着什么。这是一种不相容的变化吗?我可以安全地升级到1.9.0版吗?

视情况而定。是的,此更改不兼容。如果你有书面测试,你可以检查它是否影响你。以这段代码为例:

example = "new"
obj = method: (@example) -> console.log(example)
obj.method "old"
在1.8中,这将打印旧的。在新版本中,这将打印新的

在旧版本中,@example将在方法参数中转换为example。因此,您正在旧版本中访问obj.method的函数参数。 在新版本中,您将访问外部作用域的示例变量。a、 在这两种情况下,示例仍然设置为old

在这里,您可以看到生成的JS代码中的差异:

-// Generated by CoffeeScript 1.7.1
+// Generated by CoffeeScript 1.9.0
 (function() {
   var example, obj;

   example = "new";

   obj = {
-    method: function(example) {
-      this.example = example;
+    method: function(_at_example) {
+      this.example = _at_example;
       return console.log(example);
     }
   };

   obj.method("old");

 }).call(this);

参见Patrick J.S.的答案,了解变化的含义

请参阅,了解如何知道是否可以安全升级,以及如果不能安全升级,您需要做什么