1. Место памяти в JS разделено на два типа: память стека и память кучи
Память стека: предоставляет среду для выполнения кода JS; хранит значения основных типов данных; -> Глобальная область или частная область на самом деле память стека
Хиповая память: хранит значение типа ссылочных данных (объект сохраняет в нем имя атрибута и значение атрибута, а функция хранит код в корпусе функции в виде строки)
2. Когда браузер загружает нашу HTML -страницу, он сначала предоставит среду для выполнения кода JS -> Global Scope (Global-> Window)
3. Прежде чем код JS будет выполнен, браузер должен сделать что -то само по себе: объявить или определить все ключевые слова VAR/функции
Derceare -> Скажите браузеру, что у меня есть такая вещь, например, var num1; функция FN;
Определено -> Присвоение значения объявленной переменной или функции, например, num1 = 12; fn = function () {}
[Важные] переменные только заявляют, что они не определены, значение по умолчанию не определена (не определена)
4. Обработка VAR и функции отличается на стадии предварительной интерпретации.
var -> Когда выполняется предварительная экспланация, переменная объявляется заранее. Операция назначения будет завершена только при выполнении кода.
Функция -> Во время предварительного эксплане все объявления и определения будут завершены заранее (когда код будет выполнен, он будет пропущен напрямую)
[Важно] в начале, только предварительные интерпретации выполняются в окне. Текущие строки, хранящиеся в функции FN, представляют собой все строки, поэтому VAR не имеет практического значения, поэтому предварительные интерпретации не выполняются-> «Предварительные интерпретации происходят в текущем объеме»
console.log (obj); //-> Неопределенный var obj = {name: "Zhang Shanshan", возраст: 10}; Функция fn (num1, num2) {// Прямо с пропуском, когда код выполняется в эту строку, потому что во время предварительной экспланирования мы завершили объявление и определение var total = num1 + num2; console.log (всего); } var num1 = 12; Fn (num1, 100); // Выполнить Fn, назначить значение глобальной переменной Num1 параметру Num1 и назначить 100 параметрам NUM25. Переменная, объявленная в рамках глобальной области, является глобальной переменной
Переменные, объявленные в частной масштабах, являются частными переменными; Формальные параметры функции также являются частными переменными;
Как определить, являются ли переменные, появляющиеся в функции, частными или глобальными?
Во -первых, посмотрите, является ли это формальным параметром, а затем посмотрите, был ли он объявлен в частной области (есть варьируется). Один из них - личная переменная. Тогда независимо от того, где это появляется в текущей функции, она является частной, и между ней нет никаких отношений между ней и глобальной; Если это не так, это означает, что он не является частным, то ищите предыдущую область ...
6. Когда функция выполняется, для выполнения кода будет сформирована новая частная область (память стека) в корпусе функции;
1) Присвоение значения формальным параметрам
2) Предварительная интерпретация под частной областью
3) Выполнение кода в рамках частной области
Новая частная сформированная область также защищает частные переменные внутри от внешних влияний. Мы ставим этот механизм защиты функции -> «Закрытие
Разница: те, у кого VAR, могут быть объявлены до выполнения кода, в то время как те без VAR не могут быть объявлены заранее
1. Предварительная экспланация требуется независимо от того, являются ли условия истинными или нет.
Предварительная экспланация окна: var a; -> window.a; if (! ("a" в окне)) {// "a" в окне -> true var a = "us"; } console.log (a); //-> не определен2. Предварительная интерпретация происходит только на левой стороне "=", только левая сторона представляет собой предварительную интерпретацию, а правая сторона-это значение без предварительной интерпретации.
Выражение функции анонимных функций: назначьте часть определения функции как значение событию, которое является переменной или элементом.
При предварительном эксплане: var fn; -> Значение FN по умолчанию не определено
fn (); //-> undefined () uncaught typeerror: fn не является функцией функции, только функции могут выполняться в JS && Если указан выше код выше JS, приведенный ниже код не выполняется без какой-либо специальной обработки var fn = function () {console.log («OK»); }; fn (); При предварительном эксплане: fn = xxxfff000 fn (); //-> "ok" function fn () {console.log ("ok"); } fn (); //-> "ok" function fn () {console.log ("ok"); } fn (); //-> "OK"3. Код ниже возврата в органе функции больше не выполняется, но приведенный ниже код должен участвовать в предварительном эксплане; и вещи, лежащие в основе возврата, необходимо обработать, но, поскольку он возвращается как значение, предварительная экспланация не выполняется;
var total = 300; функция fn () {console.log (total); возврат функции sum () {}; // return - это вернуть значение в функции на внешнюю часть функции, которая возвращает адрес памяти, соответствующий функции внешней части функции, например: return xxxfff111; Приведенный ниже код возвращает в корпусе функции не выполняется var total = 10; } fn ();4. Функция анонимной функции не является предварительно избыточной под глобальной областью.
Функция самоиздражания анонимной функции: определение и выполнение завершаются вместе
(function (num) {}) (100);
5. При предварительном эксплане, если имя повторяется, оно будет объявлено только один раз и не повторяется, но назначение все равно будет повторено.
Если имя переменной и имя функции совпадает с именем функции в JS, считается повторяемой
Предварительная экспланация:
var fn; объявить fn = xxxfff000; [Объявление] Не определить fn = xxxfff111; [Объявление] не + определение -> fn = xxxfff111 var fn = 12; // window.fn = 12 function fn () {//window.fn=function () {}} function fn () {}Выше приведено все соответствующие понимания о предварительной экспланации JS, доставленном вам редактором. Я надеюсь, что вы будете поддерживать wulin.com больше ~