Еще у меня из-за замыкания начинается паранойя:
proto = {
method: function (…) {
var a, b, c, d, …;
Object.keys(…).forEach(function (…) {
//к примеру, тут не нужны a, b, c, d
});
}
}
приходится выносить в отдельный метод:
proto = {
_method: function (…) {
//тут this → window
},
method: function (…) {
var a, b, c, d, …;
Object.keys(…).forEach(this._method);
}
}
но метод в прототипе, ничего не делающий с this, кажется лишним, выносим его в отдельный объект:
utils = {
method: function (…) {…}
}
proto = {
method: function (…) {
var a, b, c, d, …;
Object.keys(…).forEach(utils.method);
}
}
в итоге придется искать в коде, что же там за utils.method, который возможно состоит из пары строчек и самостоятельно не имеет смысла, появляется проблема с передачей дополнительных переменных.
а можно было всего-лишь написать:
proto = {
method: function (…) {
var a, b, c, d, …, keys = Object.keys(…), i = keys.length;
while (i--) {
…
}
}
}
поэтому forEach использую, только когда действительно нужен локальный скоп, а еще в светлом будущем ожидается let