Почему мы должны проверять определяемую переменную var m = m || function(){}

#javascript

#javascript

Вопрос:

Во многих библиотеках я видел методы, определенные подобным образом

 Common.deepCopy = Common.deepCopy || function(oldObject) {
        return $.extend(true, {}, oldObject);
    };
  

Для чего нужны методы определения объектов, подобных этому.

Поскольку файлы js будут выполнены только один раз, поэтому нет шансов, что deepCopy был определен ранее.

Комментарии:

1. Что, если другая библиотека реализует именно этот метод? Тогда проверка имеет смысл, imo..

Ответ №1:

Это на тот случай, если она уже была определена в другом файле, или если скрипт выполняется более одного раза.

Ответ №2:

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

Ответ №3:

Часто это делается для того, чтобы проверить, существует ли что-то уже в среде или нет, например Array.prototype.indexOf . В oldIE этого не существует.

 var indexOf = [].indexOf ? fn : fn2
  

Теперь вы могли бы определить fn для использования собственного indexOf, а затем использовать fn2 для сред, которые его не поддерживают.

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