Область всегда является главным приоритетом на любом языке программирования, потому что он контролирует видимость и жизненный цикл переменных и параметров. Говоря об этом, сначала поймите две концепции: область объема и функции на уровне блока.
Что такое область на уровне блока?
Заявление, установленное в любой паре вьющихся скоб ({и}), принадлежит блоку, и все переменные, определенные в этом, невидимы за пределами блока кода, который мы называем областью на уровне блока.
Объем функции легко понять (*^__^*), а параметры и переменные, определенные в функции, невидимы вне функции.
У большинства языков C-класса есть прицелы на уровне блоков, но JS нет. Пожалуйста, смотрите демо ниже:
// c Language#включить <stdio.h> void main () {int i = 2; я--; if (i) {int j = 3; } printf ("%d/n", j); }При запуске этого кода появится ошибка «Использовать неопределенную переменную: J». Как видите, C Language имеет область на уровне блока, потому что J определяется в блоке операторов IF, поэтому он недоступен вне блока.
И как выступает JS, давайте посмотрим на другую демонстрацию:
functin test () {for (var i = 0; i <3; i ++) {} alert (i); } тест();Запустите этот код, и появляется «3». Видно, что вне блока переменная, которую я определил в блоке, все еще доступна. То есть JS не поддерживает области на уровне блоков, он поддерживает только области функций, а переменные, определенные в любом месте функции, видны в любом месте этой функции.
Итак, как мы делаем JS иметь область на уровне блоков? Вы все еще помните, что когда переменная, определенная в функции, вызывается, переменная будет уничтожена? Можем ли мы использовать эту функцию для моделирования объема JS на уровне блока? Посмотрите на следующую демонстрацию:
function test () {(function () {for (var i = 0; i <4; i ++) {}}) (); оповещение (i); } тест();Запустите его снова в это время, появится неопределенная ошибка "I". Ха -ха, это реализовано ~~~ здесь, мы помещаем блок оператора для закрытия и называем эту функцию. Когда функциональный вызов будет завершен, переменная, которую я буду автоматически уничтожен, поэтому мы не можем получить к нему доступ вне блока.
Особенность закрытия JS является наиболее важной особенностью ((*^__^*) все понимают). В JS, чтобы предотвратить конфликты именования, мы должны стараться не использовать глобальные переменные и глобальные функции. Итак, как это избежать? Хорошо, как показано в приведенной выше демонстрации, мы можем поместить все, что хотим определить в один
(function () {// content}) ();Среди них, в настоящее время, эквивалентно ли он добавлением функциональной области к их внешнему слою? Программы за пределами этой области не могут получить к ним доступ.