Я играл с кофе сценарий (я новичок в этом «языке») и попытался лишь очень простой пример:Почему CoffeeScript компилируется в унииоматический JavaScript?
x = [1, 2, 3]
for element in x
console.log(element)
Это делает то, что он говорит, для каждого из элементов выводит его на консоль. Это только тогда, когда я взял много на Javascript он компилируется, что я не могу понять, почему они это делают:
(function() {
var element, i, len, x;
x = [1, 2, 3];
for (i = 0, len = x.length; i < len; i++) {
element = x[i];
console.log(x[i]);
}
}).call(this);
бы это не просто лучше и более естественно сделать:
for(i = 0; i < x.length; i++)
{
console.log(x[i]);
}
Почему кофейный скрипт компилируется таким образом, который не кажется естественным? Если бы я писал тот же самый точный код в Javascript, я бы выполнил метод, который я сделал, но я мог ошибаться в том, что так, как я это сделал (Javascript), не самый эффективный или «естественный», а метод сценария кофе лучшие решения.
'len = x.length' означает, что они кэшируют значение' x.length' в 'len', а не вычисляют длину x при каждом проходе через цикл. это может показаться не «естественным» способом, а его оптимальным способом, который вы хотите получить от компилятора/препроцессора. они создают clsure/sef, чтобы избежать глобальных привязок. (если у вас больше кода в примере, это имеет смысл) – atmd
Проверьте этот инструмент: http://js2.coffee/ Очень полезно при сравнении JS с CoffeeScript. – kuba
@atmd - ударить ноготь по голове - ключевое слово здесь ** оптимальное **. Преобразованный код должен быть оптимальным и не обязательно «естественным» способом, которым разработчик мог бы написать код. – Lix