Использование в JavaScript Bad Practice?
-
13-10-2019 - |
Вопрос
Я думаю, что вещи вроде with(Math){document.body.innerHTML= PI}
Не было бы хорошей практикой.
Решение
Я бы назвал это плохой практикой, учитывая, как это влияет на цепочку применения.
Взгляните на эту статью от Дугласа Крокфорда: "с заявлением, считающимся вредным"
Другие советы
Краткое краткое изложение ссылки в ответе Мэтта заключается в том, что проблема с использованием оператора «с» заключается в том, что переменные в блоке «с» неоднозначны. Используя следующий пример:
with(foo.doo.diddly.doo){
bar = 1;
baz = 1;
}
Если вы не уверены, что foo.doo.diddly.doo имеет свойства бара или баз, вы не знаете, выполняются ли бар и баз внутри оператора с оператором, или какой -то глобальный бар и баз. Лучше использовать переменные:
var obj = foo.doo.diddly.doo;
obj.bar = 1;
obj.baz = 1;
В вашем примере, однако, математика вряд ли является достаточно длительным термином, чтобы оправдать даже использование переменной, но я предполагаю, что у вас есть более многословное приложение, чем вы использовали для этого вопроса.
Если вы получаете доступ (вложенные) свойства объекта один раз, то нет необходимости «кэшировать».
Но если вы получаете доступ к ним больше, то один раз, вам следует сохранить ссылку в локальной переменной. Это имеет два преимущества:
- (Вложенные) свойства не нужно искать более одного раза (потенциально в цепочке наследования, которая медленная!).
- Особенно глобальные объекты (но любой объект, который не в текущем объеме), необходимо найти только однажды в цепочке прицела. Последующий доступ будет быстрее.
А теперь связь с with
:
Он генерирует новую область в начале текущей цепочки сфера. Это означает, что любой доступ к другим переменным/объектам будет стоить по крайней мере один поиск области, даже к локальным переменным.