Вопрос

Я думаю, что вещи вроде 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;

В вашем примере, однако, математика вряд ли является достаточно длительным термином, чтобы оправдать даже использование переменной, но я предполагаю, что у вас есть более многословное приложение, чем вы использовали для этого вопроса.

Если вы получаете доступ (вложенные) свойства объекта один раз, то нет необходимости «кэшировать».

Но если вы получаете доступ к ним больше, то один раз, вам следует сохранить ссылку в локальной переменной. Это имеет два преимущества:

  1. (Вложенные) свойства не нужно искать более одного раза (потенциально в цепочке наследования, которая медленная!).
  2. Особенно глобальные объекты (но любой объект, который не в текущем объеме), необходимо найти только однажды в цепочке прицела. Последующий доступ будет быстрее.

А теперь связь с with:

Он генерирует новую область в начале текущей цепочки сфера. Это означает, что любой доступ к другим переменным/объектам будет стоить по крайней мере один поиск области, даже к локальным переменным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top