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