уничтожьте функцию в JavaScript (jQuery)

Спасибо за Ваш вход - все превосходные и очень актуальные вопросы. Я предполагаю, что больше смотрю на гибкость обновления. Если необходимо изменить схему для добавления новой опции (позволяет, говорят для веб-приложения) или улучшать существующие функции, просто сделать в единой базе данных. Если необходимо было копировать это изменение через 1 000 отдельных баз данных, шанс ошибочных увеличений. Что, если операция перестала работать? Сколько времени занимает обновить каждый клиент?

, Если надлежащие резервные копии сохранены (или если Ваша база данных была структурирована, где данные на самом деле никогда не перезаписывались), восстанавливая данные для конкретного клиента тривиально.

простота кода, в то время как важный, действительно не становится чрезвычайно сложной. В зависимости от используемого языка и методологии, просто создать объекты, которые представляют только, что определенный клиент (которые хранят конкретный Клиентский идентификатор) и остальная часть проекта только должен быть кодирован для отдельного объекта (вид подобных единственный клиент).

Масштабируемость - что-то для рассмотрения - Вы правы, что легко взять единственную изолированную базу данных и переместить его в различный физический сервер; однако, это становится все больше легче к кластерным серверам вместе - и даже без кластеризации, кажется, что это было бы небольшое изменение для указания на каждый клиент на сервер базы данных, который размещает универсальную базу данных (таким образом, у Вас могло быть два или три серверов баз данных, размещающие только единую базу данных каждый, например). Этот подход сохраняет процесс обновления ограниченным только тремя базами данных.

5
задан Gareth McCaughan 16 October 2012 в 10:28
поделиться

4 ответа

По сути, вам нужно удалить все ссылки на эти функции, чтобы сборщик мусора JavaScript мог их собрать. Если они связаны, их нужно развязать. Если там есть другие переменные, которые указывают на них, им нужно установить значение null.

Это может помочь, если вы разместили какой-то код; тогда мы сможем дать лучший ответ.

... EDIT:

Что здесь происходит, вы создаете замыкание, которое переживет содержащую функцию:

    function edit(){
      $('.edit').click(function(){
        //...
        function _edit(boxTitle,selectedItemAmount){
          //...
          $('#box .yes').click(function(){
            alert(boxTitle + ' for ' + selectedItemAmount + ' selected item');
            $('#msg').hide(); // hide msg box when yes btn is clicked
          });
        }
        //...
        $('#box .no').click(function(){
          $('#msg').hide();
        });
      });

Другими словами, внутри функции вы ' Вы говорите: «Присоедините эту функцию к объекту DOM», и вы делаете это встроенно. JavaScript захватывает переменные из внешнего контекста и сохраняет их в рабочем состоянии, пока активна ссылка на внутренний контекст.

Что вам нужно сделать, так это определить функции где-то не в строке, а затем использовать их:

    function boxClickYes(e) {
      alert(e.data.boxTitle + ' for ' + e.data.selectedItemAmount +
        ' selected item');
      $('#msg').hide(); // hide msg box when yes btn is clicked
    }
    function boxClickNo(e) {
      $('#msg').hide();
    }
    function edit(){
      $('.edit').click(function(){
        //...
        function _edit(boxTitle,selectedItemAmount){
          //...
          $('#box .yes').bind("click", {boxTitle: boxTitle,
            selectedItemAmount: selectedItemAmount}, boxClickYes);
        }
        //...
        $('#box .no').click(boxClickNo);
      });

Это также демонстрирует, как использовать свойство данных в обработчиках кликов jQuery для хранения данных между моментом, когда вы прикрепляете обработчик, и временем, когда вы его используете (вместо сохранения этих данных в закрытии, которое будет сохранять цепочку областей видимости в памяти ). Использование встроенных функций нормально, если вы просто используете их прямо здесь (например, тело $. Each ), но это не нормально, когда вы подключаете обработчики событий.

4
ответ дан 18 December 2019 в 08:29
поделиться

Вы можете попытаться обнулить функцию или переопределить ее, назначив анонимную функцию, которая ничего не делает:

myFunction = null;
// or 
myFunction = function () {};

Вы также можете сделать это внутри самой функции:

var autoDestroy = function () {
  autoDestroy = null;
  //...
  return 1;
};

autoDestroy(); // returns 1
autoDestroy(); // TypeError: autoDestroy is not a function
8
ответ дан 18 December 2019 в 08:29
поделиться

для отмены привязки событий в jquery используйте функцию отмены привязки http://docs.jquery.com/Events/unbind

$("something").click(function() {
    $("anotherOne").click(function() {
         ....
    });
});

в этом примере каждый раз, когда нажимается "что-то", появляется обработчик событий добавлен в «anotherOne», поэтому, если вы щелкните три раза, вы получите три обработчика событий.

$("something").click(function() {
    $("anotherOne").unbind('click').click(function() {
         ....
    });
});

здесь у вас гарантированно будет только один обработчик щелчка на «anotherOne».

Нет необходимости явно уничтожить предыдущий обработчик.

6
ответ дан 18 December 2019 в 08:29
поделиться

Чтобы «уничтожить» функцию в javascript, просто убедитесь, что функция становится недоступной. Это позволит функции подлежать возврату. Следует обратить внимание на то, что переменные javascript связаны на основе областей видимости (а не как отдельные переменные), а область видимости со многими неиспользуемыми объектами может сохраняться, если привязка сохраняется в области: для предоставления любых для получения дополнительной справки требуется знание конкретного кода и того, как он используется.

Пожалуйста, рассмотрите оператор удаления javascript как один из способов удаления переменной или члена объекта. Установка значения null / undefined / other-object удаляет метод достижения объекта, на который ранее ссылались (хотя в противном случае он все еще может быть доступен и, следовательно, не может быть возвращен), но не избавляет от переменной / члена.

delete variable
delete obj.member
delete obj[member]
1
ответ дан 18 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: