Глобальные переменные JS
Глобальные переменные JS

❝Вы учитесь в Интернете, осваиваете новые навыки или Интернет помогает вам реализовать себя, тогда Интернет — ваш инструмент, если вы просто играете в Интернете и тратите свое время и деньги, но получаете только духовное удовлетворение, то вы есть; инструмент Интернета. В свободном мире вы являетесь продуктом - «Взросление». ❞

лаконично и по делу

  1. Объемда«Статический»из
  2. Объемпроходить«лексическая среда»实现из
  3. Лексическое окружение = запись окружения + OuterEnv
  4. ОбъемChain переменных от лексическая средасерединаOuterEnv串联
  5. существоватьсреда браузера Вниз,globalThisне указывая прямо наглобальный объект
  6. WindowProxyда一个将所有访问转发到当前窗口из对象
  7. глобальная среда Запись использованияЗапись среды объектаиОбъявить записи среды来管理变量
  8. проходитьconst,letиclass创建из变量被绑定到Объявить записи средысередина
  9. проходитьvarифункция声明из变量被绑定到Запись среды объектасередина
  10. Переменные в объявленных переменных среды доступны в первую очередь.
  11. Используйте ECMAScript и встроенный глобальный объект инициализации глобальной переменной среды хоста.

Краткое содержание статьи

  1. Объем
  2. Lexical Environments (лексическое окружение)
  3. глобальный объект(global object)
  4. среда браузера ВнизизglobalThis
  5. глобальная среда(global envrionment)
  • Script Объем и модуль Объем
  • Сгенерировать переменные: Объявить записи среды vs Запись среды объекта
  • переменные доступа
  • Глобальные переменные ECMAScript и глобальные переменные хоста
  1. Картинка побеждает Предисловие

1. Область применения

我们平时常说из变量из Объем(scope),Его полное имя должно быть«лексическая область видимости»(lexical scope)。它да程序середина可以переменные Область доступа, то есть Объем, управляет видимостью и временем жизни переменных и функций.

В нашей предыдущей статье мы описали основной процесс выполнения JS-кода V8. 1. Сначала скомпилируйте 2. После выполнения。существовать这个编译из过程就да«Статический»из。Итак, мы можем сказать,Объемда«Не меняется во время выполнения кода»из变量查找机制。

❝Область применения JS статична. ❞

В то же время области видимости также могут быть вложенными.

Язык кода:javascript
копировать
function func() { // (A)
  const v1 = 1;
  if (true) { // (B)
    const v2 = 2;
  }
}

Как показано выше: существоватьB行изif语句内嵌существоватьA行изfunc()функция Объем.

Мы ставим внутреннюю Объем外面из Объемназывается:outer Объем.Например:funcОбъем就даifОбъемиз outer Объем.

2. Lexical Environments (лексическое окружение)

Определено в спецификации языка ecma262 (принесите свою 🪜):

❝Объемпроходить«лексическая среда»实现из ❞

Лексическая среда состоит из двух важных частей:

  1. «Экологический рекорд»(environment record): 将变量名映射到变量值(Похоже на:Map)。这да Объем变量из实际存储空间。记录серединаиз"имя-значение"条目называется绑定(binding)。
  2. OuterEnvвнутренние свойства:ориентированный«Внешняя среда»(outer ссылка на окружение)

Вложенные деревья областей действия в коде связаны OuterEnv, указывающим на внешнюю среду. Прямо сейчас:

❝ОбъемChain переменных от лексическая средасерединаOuterEnv串联 ❞

3. Глобальные объекты

Глобальный объект — это объект, свойства которого становятся глобальными переменными. Доступ к глобальным объектам можно получить следующим образом.

  1. globalThis: Все платформы/Среда хоста может получить доступ,он работает с глобальными переменнымиthisиз值相等。
Язык кода:javascript
копировать
// среда браузера
`globalThis === this //true`
// node REPL
`globalThis === this //true`
  1. Другие пункты глобального Доступ к переменным объекта возможен только на указанной платформе
  • window:它существовать浏览器«Основная тема»环境Вниз生效,但дасуществоватьWeb Workers/Node环境Вниз失效
  • self: Эффективен в среде браузера (основной/веб-интерфейс). Worker),существоватьNode环境Вниз失效
  • global: 只有существоватьNode环境Вниз生效

4. среда браузера ВнизизglobalThis

существоватьсреда браузера Вниз,globalThisне указывая прямо наглобальный объект。

Например,现существовать有一个网页存существовать一个iframe:

  • в любое времяiframeсерединаизsrcиз值发生变更,Он получит новый глобальный объект
  • несмотря ни на чтоiframeизsrcиз值如何变化,globalThisиз值一直不变

现существовать有两个html 1. parent 2. child

parent.html

Язык кода:javascript
копировать
<iframe src="child.html?first"></iframe>
<script>
  const iframe = document.querySelector('iframe');
  const icw = iframe.contentWindow; // iframeиз`globalThis`  iframe.onload = () => {
    // Доступ к глобальным атрибутам iframe через globalThis
    const firstGlobalThis = icw.globalThis;
    const firstArray = icw.Array;
    console.log(icw.iframeName); // 'first'

    iframe.onload = () => {
      const secondGlobalThis = icw.globalThis;
      const secondArray = icw.Array;

      // глобальный объект изменился
      console.log(icw.iframeName); // 'second'
      console.log(secondArray === firstArray); // false

      // globalThis Это все еще исходное значение
      console.log(firstGlobalThis === secondGlobalThis); // true
    };
    iframe.src = 'iframe.html?second';
  };
</script>

child.html

Язык кода:javascript
копировать
<script>
  // Рекомендовать глобальный от globalThis объект Добавить новыйbinding(экологический Записи значений имени в записи называются привязками.)
  globalThis.iframeName = location.search.slice(1);
</script>

globalThisпроходить两个внутренние свойства保持值из不变:

  1. Windowориентированныйглобальный объект。каждое изменениеlocation(Кwindow.location.hrefНазначение/проходить改变iframeизsrc)它из值也会随之改变。
  2. WindowProxyда一个将所有访问转发到当前窗口из对象。该对象永远不会改变

существоватьсреда браузера Вниз,globalThisориентированныйWindowProxy;существовать其他环境Вниз,globalThis直接ориентированныйглобальный объект。

5. Глобальная среда

общая ситуация Объемда«Внешний слой»из Объем:不存существовать包含它из Объем Понятно。与之匹配из环境变量(environment)дляглобальная среда(global environment)。每一个内部环境变量проходитьouterEnv构建из Объем Цепочка заканчиваетсяглобальная средасоединять。глобальная средаизouterEnvдаnull。

Записи глобальной среды (примечание: в отличие от глобальной среды) используют два типа записей среды для управления переменными.

  • Запись среды объекта(object environment record ): привязка (запись значения имени в записи среды называется привязкой) Сохранено в объекте. В глобальной В окружающей среде этот объект указывает на глобальный объект。
  • Объявить записи среды(declarative environment record): Иметь собственное место для хранения привязок

5.1 Область действия сценария и область действия модуля

В JS,只有существоватьscriptиз顶层才属于общая ситуация Объем.相反из,Каждый модуль имеет свой объем.,И этот Объем служит подмножеством глобального Объема.

Для описания отношений между ними используется псевдокод:

Язык кода:javascript
копировать
{ // общая ситуация Объем 

  // (глобальная переменная)

  { // module 1 Объем
    ···
  }
  { // module 2 Объем
    ···
  }
  // (....)
}

5.2 Генерация переменных: запись среды объявления и запись среды объекта

Чтобы создать глобальную переменную, нам нужно определить и присвоить переменную в глобальной области видимости (верхний уровень скрипта):

  • проходитьconst,letиclass创建из变量被绑定到Объявить записи средысередина
  • проходитьvarифункция声明из变量被绑定到Запись среды объектасередина
Язык кода:javascript
копировать
<script>
  const one = 1;
  var two = 2;
</script>
<script>
  // Все скрипты имеют общий общий объем.
  console.log(one); // 1
  console.log(two); // 2
  
  // Не все объявления переменных сохраняются в глобальном масштабе. объектсередина  console.log(globalThis.one); // undefined
  console.log(globalThis.two); // 2
</script>

5.3 Доступ к переменным

Когда мы обращаемся к переменной, которая имеет привязку как в записи среды объявления, так и в записи среды объекта.

❝Переменные в объявленных переменных среды доступны в первую очередь. ❞

Язык кода:javascript
копировать
<script>
  let gv = 1; // Магазин в Объявить записи средысередина  globalThis.gv = 2; // Магазин в Запись среды объектасередина  console.log(gv); // 1 Переменные в объявленных переменных среды доступны в первую очередь.
  console.log(globalThis.gv); // 2
</script>

5.4 Глобальные переменные ECMAScript и глобальные переменные хоста

Помимо переменных, созданных посредством объявлений var и функций, глобальный объект содержит следующие свойства:

  • Все встроенные глобальные переменные ECMAScript.
  • Все встроенные глобальные переменные среды хоста (браузер, Node.js и т. д.)

использоватьconst/let定义изобщая ситуация变量可以保证不受ECMAScriptи宿主环境из内置общая ситуация变量影响。

Например,среда браузера Вниз,存существоватьобщая ситуация变量.location

Язык кода:javascript
копировать
// Изменить информацию о пути текущей страницы
var location = 'https://789.com';

// Усечение window.location не приведет к изменению информации о текущей странице.
let location = 'https://789.com';

Примечание. Эта ситуация возникает только в глобальной среде.

Картинка побеждает Предисловие

Среда с глобальной областью действия управляет своими привязками через глобальную запись среды, которая, в свою очередь, основана на двух записях среды:

  1. Запись среды объект, его привязка хранится в глобальном объектсередина
  2. Декларативная запись среды использует внутреннюю память для хранения своих привязок.

Глобальные переменные можно создавать путем добавления свойств к глобальному объекту или посредством различных объявлений. Инициализируйте глобальные объекты с помощью ECMAScript и встроенных глобальных переменных среды хоста. Каждый модуль ECMAScript имеет свою собственную среду, а его внешняя среда — глобальная среда.

boy illustration
5 шагов для установки среды протокола
boy illustration
Наиболее полные коды состояния HTTP
boy illustration
На основе языка Go мы шаг за шагом научим вас внедрять структуру системы управления серверной частью.
boy illustration
Эффективное управление журналами с помощью Spring Boot и Log4j2: подробное объяснение конфигурации
boy illustration
Что делать, если telnet не является внутренней или внешней командой [легко понять]
boy illustration
php-объект для анализа json_php json
boy illustration
Введение в принцип запуска Springboot, процесс запуска и механизм запуска.
boy illustration
Высокоуровневые операции Mongo, если данные не существуют, вставка и обновление, если они существуют (pymongo)
boy illustration
Проектирование и внедрение системы управления электронной коммерцией на базе Vue и SpringBoot.
boy illustration
Статья длиной в 9000 слов знакомит вас с процессом запуска SpringBoot — самым подробным процессом запуска SpringBoot в истории — с изображениями и текстом.
boy illustration
Как настроить размер экрана в PR. Учебное пособие по настройке размера видео в PR [подробное объяснение]
boy illustration
Элегантный и мощный: упростите операции ElasticSearch с помощью easy-es
boy illustration
Проект аутентификации по микросервисному токену: концепция и практика
boy illustration
【Java】Решено: org.springframework.http.converter.HttpMessageNotWritableException.
boy illustration
Изучите Kimi Smart Assistant: как использовать сверхдлинный текст, чтобы открыть новую сферу эффективной обработки информации
boy illustration
Начало работы с Docker: использование томов данных и монтирования файлов для хранения и совместного использования данных
boy illustration
Использование Python для реализации автоматической публикации статей в публичном аккаунте WeChat
boy illustration
Разберитесь в механизме и принципах взаимодействия потребителя и брокера Kafka в одной статье.
boy illustration
Spring Boot — использование Resilience4j-Circuitbreaker для реализации режима автоматического выключателя_предотвращения каскадных сбоев
boy illustration
13. Springboot интегрирует Protobuf
boy illustration
Примечание. Инструмент управления батареями Dell Dell Power Manager
boy illustration
Общая интерпретация класса LocalDate [java]
boy illustration
[Базовые знания ASP.NET Core] -- Веб-API -- Создание и настройка веб-API (1)
boy illustration
Настоящий бой! Подключите Passkey к своему веб-сайту для безопасного входа в систему без пароля.
boy illustration
Руководство по настройке Nginx: как найти, интерпретировать и оптимизировать настройки Nginx в Linux
boy illustration
Typecho отображает использование памяти сервера
boy illustration
Как вставить элемент перед указанным ключом в ассоциативный массив в PHP
boy illustration
swagger2 экспортирует API как текстовый документ (реализация Java) [легко понять]
boy illustration
Выбор фреймворка nodejs Express koa egg MidwayJS сравнение NestJS
boy illustration
Руководство по загрузке, установке и использованию SVN «Рекомендуемая коллекция»