Это зависит от контекста, в котором вы хотите что-то будет «нормально». Это работает? Если это так, иногда это все, что нужно. Является ли кто-то другим, кто читает ваш код о том, что он делает, поддерживает ли он, безопасно ли это?
Итак, код. Это работает? №
Переменная метода «html» будет инициализирована до нуля каждый раз, когда вызывается эта функция прототипа, поэтому условное значение в вашей внутренней функции всегда будет оцениваться как истина и пройти шаги по настройке элементов dom.
Нужно ли здесь использовать крышу? №
Вы создаете закрытие, которое не будет сохраняться за пределами вызывающего контекста и поэтому бесполезно. Каждый раз, когда вы вызываете Bar.HTML(), вы создаете и уничтожаете дополнительный контекст только для выполнения некоторого кода, так как вы не храните или не возвращаете ссылку на закрытие, чтобы действовать позже. Вы можете просто фактор закрытия из, и получить лучшие результаты исполняющих:
Bay.prototype.HTML = function() {
var html;
if(!html) {
var td = docCreate('td');
td.setAttribute('id', 'bay' + this.number);
td.setAttribute('class', 'bay');
html = td;
}
return html;
}
Конечно, с той HTML варом объявляются прямо, если заявление не нужно, но я предполагаю, что это только некоторые примеры кода ,
Вот отличная информация о closures in javascript, когда и как их использовать.
Что значит «это нормально»? – Zirak
Это выглядит «ОК», но, по моему мнению, сложнее. Почему бы просто не привязать html к экземпляру Bay (whith this.html) и не удалить внутреннее закрытие и много кода? –