Затенение переменных в JavaScript
ниже есть жизнь который (как и любая функция) создает локальную область. Внутри этой области есть . Теперь, поскольку в браузере уже есть глобальная функция с этим именем, локальная функция затмит глобальную parseInt
функция-внутри IIFE любой вызов parseInt
вызовет локальную функцию, а не глобальную. (Глобальная функция по-прежнему может ссылаться на window.parseInt
.)
parseInt('123', 10); // the browser function is called
(function() {
function parseInt() { return 'overshadowed'; }
parseInt('123', 10); // the local function is called
})();
parseInt('123', 10); // the browser function is called
есть de юре!--11--> (спецификация ECMAScript) или де-факто (общей) имя? Осенение? Перегрузка?
3 ответов
правильный термин -[Переменная] Тенизации
в программировании на компьютере,затенение переменных происходит, когда переменная, объявленная в определенной области (блок решений, метод или внутренний класс), имеет то же имя, что и переменная, объявленная во внешней области. эта внешняя переменная называется тенью...
функции в JavaScript-это просто функциональные объекты, хранящиеся в переменных (или свойства), которые следуют тем же правилам цепочки областей / разрешения, что и обычные переменные (или свойства). Это объясняет, почему оригинал все еще может быть доступен как window.parseInt
Как хорошо. Это" IIFE", который вводит эту новую область (функции-единственный способ ввести новую область в JavaScript).
однако спецификация ECMAScript [5-е издание] не использует термин слежка, я не могу найти конкретный срок замены. (Принцип слежка поведение определяется в "10.2.2.1 GetIdentifierReference" и связанных разделах.)
Это не перегрузка и не переопределение, которые совершенно разные. Я понятия не имею, где осенение (в этом контексте) возник или как он должен отличаться от" нормального"[переменная] тенизации. Если термин слежка уже не существует, чтобы объяснить это поведение тогда - с точки зрения английского языка в любом случае -осенение ("сделать незначительным/несущественным") может быть более уместным, чем слежка ("чтобы бросить тень на/затемнить").
удачи в кодировании.
Если это произошло случайно / по ошибке, вы бы назвали это clobbering оригинал parseInt()
.
в противном случае, я думаю, я видел, что это относится к слежка недавно здесь, на переполнение стека.