- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
Wreqr.Commands = (function(Wreqr){
"use strict";
return Wreqr.Handlers.extend({
execute: function(){
var name = arguments[0];
var args = Array.prototype.slice.call(arguments, 1);
this.getHandler(name).apply(this, args);
}
});
})(Wreqr);
Как нахуя? Чтобы пояснить что лежит в arguments[0]. Не заменять же код на вот такое: А то еще седьмую строку захочется убрать:
И вообще, в этом коде явно не хватает функций car и cdr
но однородность внешнего вида мне кажется слабым аргументом против использования нормального подхода в выкавыривании аргументов фции
car/cdr это ты жжешь конечно.
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/rest_parameters
http://wiki.ecmascript.org/doku.php?id=harmony:rest_parameters
И вот 6 строка меня тут меньше всего смущает )
согласен, таки строка 7 шикарна
А вот здесь я бы поспорил: Так что, есть вероятность, что таким образом они отвязываются от переприсваиваний Wreqr извне.
Но в этом конкретном случае - попробуйте представить какую-нибудь ситуацию, когда такая функция должна будет вернуть разные результаты и зачем такое может понадобиться? Это как создавать множество функций умножения или сложения.
Код должен был выглядеть так, скорее всего, вся внешняя функция вообще не нужна.
А кто тут создает одинаковые функции? Создается всего лишь замыкание - небольшая структурка, хранящая ссылки на захваченные переменные, да ссылку на код функции, который один на всю толпу. Даже несмотря на черезжопный скопинг жса, замыкания во многих случаях удобней одной функции и цикла/хеша в ней.
Ну как еще по-другому обьяснить... тут была функция, которая всегда возвращала одну и ту же функцию, только созданную по-новой, а вот уже применив функцию которую мы вернули в первый раз можно было получить разные результаты.