Область определения функции — интернет энциклопедия для студентов
ОПРЕДЕЛЕНИЕ
Областью определения или области функции \(\ y=f(x) \) является множество значений x, для которых имеются значения \(\ y=f(x) \).
Обозначает область определения функции — \(\ D(f) \) или \(\ D(y) \)
Поиск области действия функции
Схема поиска области определения функций:
Если \(\ f(x) \) является многочленом, то область определения функции \(\ y=f(x) \) будет множеством всех вещественных чисел.
Если \(\ f(x) \)- рациональная дробь, то область есть множество всех вещественных чисел, кроме тех значений E, для которых знаменатель равен нулю.
Если функция имеет вид \(\ y=\sqrt{f(x)} \),то областью определения является множество решений неравенства \(\ f(x) \geq 0 \)
Если функция имеет вид \(\
y=\frac{g(x)}{\sqrt{f(x)}}
\) , где \(\
g(x)
\) — некоторый многочлен, то область определения есть множество решений неравенства \(\
f(x)>0
\) .
\(\ (x-1)(x-2) \geq 0 \)
Обозначим найденные корни на числовой оси и определим знак неравенства на полученных интервалах.
Таким образом, \(\ D\left(y_{2}\right) : x \in(-\infty, 1] \cup[2,+\infty) \)
3) Функция \(\ y_{3}=\frac{2 x-7}{\sqrt{3 x+21}} \) является дробной рациональной функцией, числитель которой является многочленом. Областью многочлена является множество вещественных чисел R. В знаменателе корень, его область находится из системы
\(\ \left\{\begin{array}{l}{3 x+21 \geq 0,} \\ {3 x+21 \neq 0,}\end{array} \Rightarrow 3 x+21>0 \Rightarrow 3 x>-21 \Rightarrow x>-7\right. \)
Таким образом, \(\ D\left(y_{3}\right) : x \in(-7,+\infty) \)
\(\ D\left(y_{1}\right) : x \in(-\infty, 5) \cup(5,+\infty) \)
\(\ D\left(y_{2}\right) : x \in(-\infty, 1] \cup[2,+\infty) \)
\(\ D\left(y_{3}\right) : x \in(-7,+\infty) \)
ПРИМЕР 2
Найдите область следующих функций:
\(\ y_{1}=\sqrt{3^{2 x-5}-1} ; 2 ) y_{2}=\sqrt{-\log _{2} x+1} ; 3 ) y_{3}=\log _{x}(x-0,5) \)
1) Чтобы найти область определения функции \(\ y_{1}=\sqrt{3^{2 x-5}-1} \) ,мы решим неравенство
\(\ 3^{2 x-5}-1>0 \Rightarrow 3^{2 x-5}>1 \Rightarrow 3^{2 x-5}>3^{0} \)
Поскольку основание степени \(\ 3>1 \), мы приходим к неравенству
\(\ 2 x-5>0 \Rightarrow 2 x>5 \Rightarrow x>2,5 \)
Таким образом, \(\ D\left(y_{1}\right) : x \in(2,5 ;+\infty) \)
2) Чтобы найти область определения функции \(\
y_{2}=\sqrt{-\log _{2} x+1}
\) ,необходимо учитывать, что радиус должен быть неотрицательным, а сублогарифмическая функция должна быть положительной. Существует система неравенств
\(\ \left\{\begin{array}{l}{-\log _{2} x+1 \geq 0} \\ {x>0}\end{array}\right. \)
Мы решаем первое неравенство отдельно
\(\ -\log _{2} x+1 \geq 0 \Rightarrow \log _{2} x \leq 1 \)
Согласно определению логарифма мы приходим к неравенству
\(\ x \leq 2 \)
Таким образом, искомая область определения \(\ D\left(y_{2}\right) : x \in(0,2] \).
3) Учитывая определение логарифмической функции, область определения \(\ y_{3}=\log _{x}(x-0,5) \).найти из системы
\(\ \left\{\begin{array}{l}{x>0} \\ {x \neq 1,} \\ {x-0,5>0}\end{array} \Rightarrow\right. \left\{\begin{array}{l}{x>0} \\ {x \neq 1,} \\ {x>0,5}\end{array} \Rightarrow\right. \left\{\begin{array}{l}{x \neq 1} \\ {x>0,5}\end{array} \Rightarrow\right. (0,5 ; 1) \cup(1 ;+\infty) \)
В результате получаем, что \(\ D\left(y_{3}\right) : x \in(0,5 ; 1) \cup(1 ;+\infty) \)
\(\ D\left(y_{1}\right) : x \in(2,5 ;+\infty) \)
\(\ D\left(y_{2}\right) : x \in(0,2] \)
\(\ D\left(y_{3}\right) : x \in(0,5 ; 1) \cup(1 ;+\infty) \)
Физика
166
Реклама и PR
31
Педагогика
80
Психология
72
Социология
7
Астрономия
9
Биология
30
Культурология
86
Экология
8
Право и юриспруденция
36
Политология
13
Экономика
49
Финансы
9
История
16
Философия
8
Информатика
20
Право
35
Информационные технологии
6
Экономическая теория
7
Менеджент
719
Математика
338
Химия
20
1
Медицина
5
Государственное и муниципальное управление
2
География
542
Информационная безопасность
2
Аудит
11
Безопасность жизнедеятельности
3
Архитектура и строительство
1
Банковское дело
1
Рынок ценных бумаг
6
Менеджмент организации
2
Маркетинг
238
Кредит
3
Инвестиции
2
Журналистика
1
Конфликтология
15
Этика
9
Формулы дифференцирования Квадратная матрица Диагональная матрица Невырожденная и вырожденная матрицы Операции над матрицами и их свойства
Узнать цену работы
Узнай цену
своей работы
Имя
Выбрать тип работыЧасть дипломаДипломнаяКурсоваяКонтрольнаяРешение задачРефератНаучно — исследовательскаяОтчет по практикеОтветы на билетыТест/экзамен onlineМонографияЭссеДокладКомпьютерный набор текстаКомпьютерный чертежРецензияПереводРепетиторБизнес-планКонспектыПроверка качестваЭкзамен на сайтеАспирантский рефератМагистерскаяНаучная статьяНаучный трудТехническая редакция текстаЧертеж от рукиДиаграммы, таблицыПрезентация к защитеТезисный планРечь к дипломуДоработка заказа клиентаОтзыв на дипломПубликация в ВАКПубликация в ScopusДиплом MBAПовышение оригинальностиКопирайтингДругоеПринимаю Политику конфиденциальности
Подпишись на рассылку, чтобы не пропустить информацию об акциях
.

TLDR
JavaScript имеет лексическую (также называемую статической) область видимости и замыкания. Это означает, что вы можете определить область действия идентификатора, просмотрев исходный код.
Четыре области действия:
- Глобальная — видна всем
- Функция — видна внутри функции (и ее подфункций и блоков)
- Блок — виден внутри блока (и его подблоков)
- Модуль — виден внутри модуля
Вне особых случаев глобальной области и области модуля переменные объявляются с использованием var
(область функции), let
(область действия блока) и const
(область действия блока). Большинство других форм объявления идентификатора имеют блочную область видимости в строгом режиме.
Обзор
Область действия — это область кодовой базы, в которой действует идентификатор.
Лексическая среда — это сопоставление между именами идентификаторов и связанными с ними значениями.
Область действия формируется из связанной вложенности лексических сред, причем каждый уровень вложенности соответствует лексической среде родительского контекста выполнения.
Эти связанные лексические среды образуют «цепочку» области видимости. Разрешение идентификатора — это процесс поиска в этой цепочке совпадающего идентификатора.
Разрешение идентификатора происходит только в одном направлении: наружу. Таким образом, внешнее лексическое окружение не может «видеть» внутреннее лексическое окружение.
Существует три важных фактора, определяющих область действия идентификатора в JavaScript:
- Как был объявлен идентификатор
- Где был объявлен идентификатор
- Независимо от того, находитесь ли вы в строгом или нестрогом режиме
Некоторые из способов объявления идентификаторов:
-
var
,let
иconst
- Параметры функции
- Параметр блока захвата
- Объявления функций
- Именованные функциональные выражения
- Неявно определенные свойства глобального объекта (т.
е. отсутствуют
var
в нестрогом режиме) -
импорт
выписки -
оценка
Некоторые идентификаторы местоположений могут быть объявлены:
- Глобальный контекст
- Функциональный блок
- Рядовой блок
- Верхняя часть управляющей структуры (например, цикл, if, while и т. д.)
- Корпус конструкции управления
- Модули
Стили объявлений
var
Идентификаторы, объявленные с использованием var
, имеют область действия , за исключением случаев, когда они объявлены непосредственно в глобальном контексте, и в этом случае они добавляются как свойства глобального объекта и имеют глобальную область действия. Существуют отдельные правила их использования в функциях eval
.
let и const
Идентификаторы, объявленные с использованием let
и const
имеют область действия блока

Примечание: let
, const
и var
все подняты. Это означает, что их логическая позиция определения является вершиной их охватывающей области (блока или функции). Однако переменные, объявленные с использованием let
и const
, не могут быть прочитаны или назначены до тех пор, пока управление не пройдет точку объявления в исходном коде. Промежуточный период известен как временная мертвая зона.
функция f() { функция г() { console.log(x) } пусть х = 1 г() } f() // 1, потому что x поднимается, несмотря на то, что он объявлен с помощью `let`!
Имена параметров функций
Имена параметров функций ограничиваются телом функции. Обратите внимание, что в этом есть небольшая сложность. Функции, объявленные как аргументы по умолчанию, закрываются по списку параметров, а не по телу функции.
Объявления функций
Объявления функций имеют блочную область в строгом режиме и область действия в нестрогом режиме. Примечание: нестрогий режим — это сложный набор эмерджентных правил, основанных на причудливых исторических реализациях различных браузеров.
Выражения именованных функций
Выражения именованных функций ограничены самими собой (например, с целью рекурсии).
Неявно определенные свойства глобального объекта
В нестрогом режиме неявно определенные свойства глобального объекта имеют глобальную область действия, поскольку глобальный объект находится на вершине цепочки областей действия. В строгом режиме это запрещено.
eval
В строках eval
переменные объявлены с использованием var
будет помещен в текущую область или, если eval
используется косвенно, как свойства глобального объекта.
Примеры
Следующее вызовет ошибку ReferenceError, так как имена
, y
и z
не имеют значения вне функции f
.
функция f() { переменная х = 1 пусть у = 1 постоянная г = 1 } console.log(typeof x) // не определено (потому что var имеет область действия!) console.log(typeof y) // не определено (поскольку тело функции представляет собой блок) console.log(typeof z) // не определено (поскольку тело функции представляет собой блок)
Следующее вызовет ошибку ReferenceError для y
и z
, но не для x
, поскольку видимость x
не ограничена блоком. Блоки, определяющие тела структур управления, например , если
, для
и , пока
, ведут себя аналогично.
{ переменная х = 1 пусть у = 1 постоянная г = 1 } console.log(x) // 1 console.log(typeof y) // не определено, потому что `y` имеет блочную область видимости console.log(typeof z) // не определено, потому что `z` имеет область блока
В дальнейшем x
видны вне цикла, потому что var
имеет область действия:
for(var x = 0; x < 5; ++x) {} console.log(x) // 5 (обратите внимание, что это вне цикла!)
. ..из-за такого поведения вам нужно быть осторожным при закрытии переменных, объявленных с помощью
var
в циклах. Здесь объявлен только один экземпляр переменной x
, и он логически находится вне цикла.
Следующие отпечатки 5
, пять раз, а затем печатает 5
в шестой раз для console.log
вне цикла:
for(var x = 0; x < 5; ++x) { setTimeout(() => console.log(x)) // закрывается по `x`, который логически расположен в верхней части охватывающей области, над циклом } console.log(x) // примечание: виден вне цикла
Следующее выводит undefined
, потому что x
является блочным. Обратные вызовы запускаются один за другим асинхронно. Новое поведение для пусть
переменных означает, что каждая анонимная функция закрывается по другой переменной с именем x
(в отличие от var
), поэтому печатаются целые числа от 0
до 4
. :
for(let x = 0; х < 5; ++х) { setTimeout(() => console.log(x)) // объявления `let` повторно объявляются для каждой итерации, поэтому замыкания захватывают разные переменные } console.log(typeof x) // undefined
Следующее НЕ будет выдавать ReferenceError
, так как видимость x
не ограничена блоком; однако он напечатает undefined
, потому что переменная не была инициализирована (из-за оператора if
).
если(ложь) { переменная х = 1 } console.log(x) // здесь `x` был объявлен, но не инициализирован
Переменная, объявленная в начале цикла for
с использованием let
, ограничена телом цикла:
for (пусть х = 0; х < 10; ++х) {} console.log(typeof x) // не определено, потому что `x` имеет блочную область видимости
Следующее вызовет ошибку ReferenceError
, поскольку видимость x
ограничена блоком:
if(false) { пусть х = 1 } console.log(typeof x) // не определено, потому что `x` имеет блочную область видимости
Переменные, объявленные с использованием var
, let
или const
, относятся к модулям:
// module1.js переменная х = 0 функция экспорта f() {} //module2.js импортировать f из 'module1.js' console.log(x) // выдает ReferenceError
Следующее будет объявлять свойство глобального объекта, поскольку переменные, объявленные с использованием var
в глобальном контексте, добавляются как свойства к глобальному объекту:
var x = 1 console.log(window.hasOwnProperty('x')) // true
let
и const
в глобальном контексте не добавляют свойства к глобальному объекту, но по-прежнему имеют глобальную область действия:
let x = 1 console.log(window.hasOwnProperty('x')) // false
Параметры функции можно считать объявленными в теле функции:
функция f(x) {} console.log(typeof x) // не определено, потому что `x` ограничен функцией
Параметры блока catch ограничены телом блока catch:
try {} catch(e) {} console.log(typeof e) // не определено, потому что область действия `e` ограничена блоком catch
Выражения именованных функций ограничены только самим выражением:
(function foo() { console.log(foo) }) () console.log(typeof foo) // не определено, потому что `foo` ограничено собственным выражением
В нестрогом режиме неявно определенные свойства глобального объекта имеют глобальную область действия. В строгом режиме вы получаете ошибку.
x = 1 // неявно определенное свойство глобального объекта (без "var"!) console.log(x) // 1 console.log(window.hasOwnProperty('x')) // true
В нестрогом режиме объявления функций имеют область действия. В строгом режиме они имеют блочную область действия.
'использовать строго' { функция foo() {} } console.log(typeof foo) // не определено, потому что `foo` имеет блочную область видимости
Принцип работы
Область действия определяется как лексическая область кода, в которой действует идентификатор.
В JavaScript каждый объект-функция имеет скрытую ссылку [[Environment]]
, которая является ссылкой на лексическое окружение контекста выполнения (фрейм стека), в котором он был создан.
При вызове функции вызывается скрытый метод [[Call]]
. Этот метод создает новый контекст выполнения и устанавливает связь между новым контекстом выполнения и лексическим окружением объекта-функции. Это делается путем копирования [[Environment]]
значение объекта-функции во внешнее поле ссылки на лексическое окружение нового контекста выполнения.
Обратите внимание, что эта связь между новым контекстом выполнения и лексическим окружением функционального объекта называется замыканием.
Таким образом, в JavaScript область действия реализуется через лексические окружения, связанные друг с другом в «цепочку» внешними ссылками. Эта цепочка лексических окружений называется цепочкой области действия, и разрешение идентификатора происходит путем поиска по цепочке соответствующего идентификатора.
Узнайте больше.
Scope Rules in Functions — Learning Python [Книга]
Теперь, когда мы приступили к написанию собственных функций, нам нужно чтобы получить более формальное представление о том, что означают имена в Python. Когда ты использовать имя в программе, Python создает, изменяет или ищет имя в том, что известно как пространство имен — место, где живут имена. Как мы видели, имена в Python Spring возникают, когда им присваивается значение. Потому что имена не объявлены заранее, Python использует присваивание имя, чтобы связать его с определенным пространством имен. Помимо упаковки код, функции добавляют дополнительный слой пространства имен к ваши программы — по умолчанию имена, назначенные внутри функции, связанный с пространством имен этой функции, и никаким другим.
Вот как это работает. Прежде чем вы начали писать функции,
весь код был написан на верхнем уровне модуля, поэтому имена
либо жили в самом модуле, либо были встроены в Python
предопределяет (например, открыть
). [29] Функции обеспечивают вложенность
пространство имен (иногда называемое
а scope ), который локализует используемые ими имена, например
что имена внутри функции не будут конфликтовать с именами снаружи
(в модуле или другой функции). Обычно мы говорим, что функции определяют локальная область , а модули определяют глобальная область . Эти две области связаны как
следующим образом:
- Охватывающий модуль представляет собой глобальную область действия
Каждый модуль представляет собой глобальную область действия — пространство имен, в котором переменные создается (назначается) на верхнем уровне файла модуля live.
- Каждый вызов функции — это новая локальная область
Каждый раз, когда вы вызываете функцию, вы создаете новую локальную область — пространство имен, в котором обычно живут имена, созданные внутри функции.
- Назначаемые имена являются локальными, если они не объявлены глобальными
По умолчанию все имена, назначенные внутри определения функции, поместить в локальную область (пространство имен, связанное с функцией вызов).
Если вам нужно присвоить имя, которое находится на верхнем уровне модуль, содержащий функцию, вы можете сделать это, объявив его в
глобальный оператор
внутри функции.- Все остальные имена являются глобальными или встроенными
Имена, которым не присвоено значение в определении функции, считаются быть глобальными (в пространстве имен объемлющего модуля) или встроенными (в модуле предопределенных имен Python предоставляет).
Разрешение имени: Правило LGB
Если предыдущий раздел звучит запутанно, на самом деле он сводится к трем простые правила:
Ссылки на имена ищут не более трех областей: локальную, затем глобальную, затем встроенный.
При назначении имен создаются или изменяются локальные имена по умолчанию.
«Глобальные» объявления сопоставляют присвоенные имена объем модуля.
Другими словами, все имена, назначенные внутри функции
9Оператор 0019 def по умолчанию является локальным; функции могут
использовать глобальные переменные, но они должны объявить глобальные переменные, чтобы изменить их. Разрешение имен Python иногда называют Правило LGB , после имен областей действия:
Когда вы используете неполное имя внутри функции, Python ищет три области действия — локальная (L), затем глобальная (G) и затем встроенный (B) — и останавливается на первом месте, где встречается имя.
Когда вы назначаете имя в функции (вместо того, чтобы просто ссылаться на нее в выражении), Python всегда создает или изменяет имя в локальная область, если только она не объявлена глобальной в этом функция.
Вне функции (т. е. на верхнем уровне модуля или на интерактивная подсказка), локальная область такая же, как global — пространство имен модуля.
Рисунок 4.1 иллюстрирует возможности Python.
три
масштабы. В качестве предварительного просмотра мы также хотели бы, чтобы вы знали, что эти
правила применяются только к простым именам (например, spam
).
В следующих двух главах мы увидим, что правила для
полные имена (например, object.
, называемые атрибуты ) живут в конкретном объекте и т.д.
работать по-разному. spam
Рис. 4-1. Правило поиска области LGB
Пример
Давайте посмотрим на ан пример, который демонстрирует идеи масштаба. Допустим, мы пишем следующее код в файле модуля:
# глобальная область X = 99 # X и функция назначены в модуле: глобальный def func(Y): # Y и Z назначены в function: locals # локальная область Z = X + Y # X не присваивается, поэтому это глобальная вернуть Z func(1) # функция в модуле: result=100
Этот модуль и содержащиеся в нем функции используют ряд имен для заниматься своими делами. Используя правила области действия Python, мы можем классифицировать следующие имена:
- Глобальные имена:
X
,func
X
является глобальным, потому что он назначается в верхний уровень файла модуля; на него можно сослаться внутри функционировать, не будучи объявленным глобальным.функция
есть глобальный по той же причине;по умолчанию
заявление присваивает функциональному объекту имяfunc
в верхний уровень модуля.- Местные названия:
Y
,Z
Y
иZ
являются локальными для функции (и существуют только во время выполнения функции), потому что они оба присвоили значение в определении функции;Z
в силу утверждения=
, иY
, потому что аргументы всегда передаются задание (подробнее об этом через минуту).
Весь смысл этой схемы сегрегации имен в том, что местные
переменные служат временными именами, которые вам нужны только во время работы функции.
бег. Например, аргумент Y
и
результат сложения Z
существует только внутри функции;
они не мешают закрывающему модулю
пространство имен (или любую другую функцию, если на то пошло). Местный/глобальный
различие также облегчает понимание функции; большинство из
имена, которые она использует, появляются в самой функции, а не в каком-то произвольном месте.
разместить в модуле. [30]
The global Statement
The global
заявление
это единственное, что
что-то вроде объявления в Python. Он сообщает Python, что
функция планирует изменить глобальные имена — имена, которые живут в
ограничивающая область видимости модуля (пространство имен). Мы говорили о глобальный
уже мимоходом; как итог:
global
означает «имя на верхнем уровне файл модуля».Глобальные имена должны быть объявлены, только если они назначены в функция.
Глобальные имена могут использоваться в функции без объявления.
Оператор global
— это просто ключевое слово. глобальный
, за которым следует одно или несколько имен, разделенных
запятые. Все перечисленные имена будут сопоставлены с прилагаемым
область действия модуля при назначении или ссылке внутри функции
тело. Например:
y, z = 1, 2 # глобальные переменные в модуле определение all_global(): global x # объявляем присвоенные глобальные значения x = y + z # нет необходимости объявлять y,z: правило 9 области 30131Здесь
x
,y
иz
- все глобальные внутри функцииall_global
.и
иz
являются глобальными, поскольку они не назначены в функция;x
является глобальным, потому что мы так сказали: мы перечислил его в оператореglobal
, чтобы сопоставить его с область модуля явно. Безглобальный
здесь,x
будет считается местным в силу назначения. Заметить, чтои
иz
не декларируются Глобальный; Правило поиска Python LGB находит их в модуле автоматически. Также обратите внимание, чтоx
может не существовать.