2015-02-05 56 views

回答

4

這取決於。是的,這種改變是不相容的。如果你有書面測試,你可以檢查它是否會影響你。拿這一小段代碼:

example = "new" 
obj = method: (@example) -> console.log(example) 
obj.method "old" 

在1.8這將打印old。在新版本中,這將打印new

在舊版本中,@example將在方法參數中轉換爲example。所以你在舊版本中訪問obj.method的函數參數。
在新版本中,您正在訪問外部範圍的example變量。在兩種情況下,a.example仍設置爲"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);