Первое золотое правило:
JS не имеет сферы на уровне блоков (вы можете реализовать его самостоятельно с помощью закрытия или других методов), только область на уровне функции. Переменные вне функции могут быть найдены в функции, но переменные внутри функции не могут быть найдены снаружи.
Firsttry:
Почему это? ?
var a = 10; function aaa () {// step-4alert (a); // step-5-> execute walerНа самом деле, все понимают принцип, это должно быть лишь вопросом простых ошибок, и все изменится.
Вторая часть:
Почему это? Потому что, когда A назначается B, B еще не определяется, поэтому A не определен, а B - 10.
Статья 2 Золотого кода:
Поиск переменных является принципом близости. Чтобы найти переменные, определяемые VAR, когда они не найдены поблизости, затем поиск наружного слоя.
смотреть:
Почему это? Есть две причины для этого: одна представляет собой предварительный анализ, а другая ищет поблизости.
var a = 10; function aaa () {alert (a); // не определен. При поиске A, вы будете искать в функции. Из-за эффекта предварительного переворота a не определяется в настоящее время, поэтому вы никогда не будете искать внешние 10 var a = 20;/*Приготовление var aalert (a); var a = 20;*/} aaa ();внимание:
Давайте подтвердим второй пункт. Хотя это принцип близости, он состоит в том, чтобы найти переменную, объявленную VAR поблизости. Это связано с тем, что переменные, объявленные VAR, являются глобальными. Здесь значение A просто модифицировано. Таким образом, вышесказанное связано с тем, что A a var не найдена в функции, поэтому я вышел на улицу и обнаружил, как только я искал, поэтому предупредил его 10; Но правда в том, что после a = 20, A действительно 20, но он еще не был выполнен, когда предупреждает ~~
Смотрите ~
В следующем примере дополнительно проверяет объем функции JS:
Это связано с тем, что когда предупреждение (а) в функции BBB действительно 20, но в настоящее время он является локальным для предупреждения о предложении (а). Оповещение (а) не может найти в функции BBB, поэтому он не может найти в функции AAA, поэтому он выходит на улицу и находит 10.
Статья 3 Золотого кода:
Когда параметры дублируются с локальными переменными, приоритет эквивалентен.
пример:
Также: при прохождении параметров базовый тип передает значение, а тип ссылки передает ссылку. (Но это не так после переназначения)
var a = 5; var b = a; b += 3; alert (a); // 5var a = [1,2,3]; var b = a; b.push (4); оповещение (a); // [1,2,3,4];
Нет проблем с приведенным выше кодом, но следующее отличается.
Поскольку B переназначен, это не указывает на A.
Кроме того, объем параметров и переменных похожи:
Сравните эти два:
Приведенные выше параметры являются основными типами, и только значения передаются. Ниже приведен ссылочный тип: (также включает в себя случай переназначения)