2015-02-05 4 views
2

В CoffeeScript 1.9.0 ChangeLog, я прочитал:CoffeeScript 1.9.0 изменение имен переменных

Changed стратегии для генерации имен переменных внутреннего компилятора. Обратите внимание, что это означает, что параметры функции @example больше не доступны в виде голой example переменных внутри тела функции.

Я не совсем понимаю, что это означает для меня как пользователя. Это как-то несовместимое изменение? Могу ли я безопасно обновить версию до версии 1.9.0?

ответ

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); 
Смежные вопросы