Закрытие JavaScript является особенностью активной разработки и пассивной разработки. То есть, с одной стороны, у JS есть закрытие, чтобы лучше решить некоторые проблемы. С другой стороны, чтобы решить определенные проблемы, JS должен использовать закрытие для решения проблем.
Первый не обсуждается здесь. Если закрытие JS может лучше решить проблему, конечно, использование закрытия лучше.
То, что я обсуждаю, является последним из -за ограничений самого JS, и проблема, которая должна быть решена с помощью закрытия, таких как требование «переменных, только инициализируются только один раз».
Обычный язык решает это:
Кода -копия выглядит следующим образом:
класс класс {
function init () {
this.n = 0;
}
функция func () {
this.n ++;
вернуть это.n;
}
}
var obj = new Class ();
JavaScript обычно решается таким образом (с использованием закрытия):
Кода -копия выглядит следующим образом:
var obj = {
func: (function () {
var n = 0;
return function () {
n ++;
возврат n;
}
}) ()
}
Но я бы порекомендовал этот метод (устранение закрытия):
Кода -копия выглядит следующим образом:
функциональный класс () {
var self = это;
self.n = 0;
self.func = function () {
self.n ++;
вернуть self.n;
}
}
var obj = new Class ();
Потому что последнее более масштабируемо. Когда вам нужно реализовать различные операции на переменной, последний может просто определить другую функцию (то есть простое линейное расширение), в то время как первое (закрытие) должно быть полностью переписываться (поэтому вы часто слышите рефакторинг слова).