Я думал о стиле программирования javascript, и мне было интересно, имеет ли смысл добавить немного синтаксического сахара, чтобы защититься от легко допущенной ошибки использования неявного глобального, т.е.
var OuterFunction = function() { // closure container
var renamedCounter = 0; // someone renamed counter,
this.resetCounter = function () {
counter = 0; // ... but forgot to check the inner functions as well.
return this;
};
return this;
}
В этом примере counter внезапно становится глобальной переменной, а не
локально ограничен экземплярами OuterFunction
.
Объявляя переменную, захваченную замыканием void
, вы получаете бесплатное утверждение, очень
как и любой другой код, который использует counter
без присвоения .
this.resetCounter = function () {
void counter; // this will throw an Error if counter is not in scope.
counter = 0;
return this;
};
Редактировать : как указал jleedev , простое использование имени переменной, по-видимому, проверяет,
оно существует, то есть
this.resetCounter = function () {
counter;
counter = 0;
return this;
};
будет работать так же хорошо.
Я вижу следующие преимущества:
- Это коротко писать.
- Это выглядит как объявление переменной, до некоторой степени.
- Отредактировано для добавления : Если все сделано последовательно, то для средства проверки синтаксиса (мяса или программы) очень просто выявлять ошибки такого рода.
С другой стороны:
- Это сбивает с толку. На самом деле код ничего не делает .
- Будущие интерпретаторы могут определить его как бессмысленный, бесполезный код и оптимизировать его.
Есть ли какие-то аспекты, которые я пропускаю? Это глупая идея или, по крайней мере, в некоторой степени оправданно?
Правка задающего вопрос : это должен быть вопрос вики сообщества, но я не вижу флажка, чтобы изменить его на это. Я смутно припоминаю, что он один.
Отредактировано для большой глупости : конечно, +=
пытается извлечь значение выражения перед приращением. Поэтому переименуйте пример в resetCounter
, а не incrementCounter
, чтобы он стал немного понятнее.