Вообще так по мне - определение лучше не то, что даётся "наиболее авторитетным/официальным" источником, а то, что наиболее точно отражает понятие в данном контексте на сегодняшний день.
Так об этом и речь. Если понятие не помогает разобраться в возникающих проблемах, то оно не нужно и его следует переопределить (или просто отказаться, как я писал выше). Так что и тимлид вполне может быть "официальным" источником, поскольку для понятия важно, чтобы все его понимали одинаково.
Конкретно для замыканий есть ряд типовых казусов, с которыми сталкиваются новички. Простое объявление одиночной функции к ним не относится. Напротив, это что-то из серии "что за?.." или "а так можно было?" после изучения основ. Поэтому всеобъемлющие определения предлагаю оставить теоретикам, а пользоваться теми, которые реально помогают отделить мух от котлет.
lazarevBoris, да, я точно знаю, о чём он. Про то, что все функции - замыкания (в Scheme), сказал не я, а автор ответа (и он в свою очередь не сам придумал, а процитировал). А я лишь добавил слово "если", не принимая и не отвергая это утверждение. Получилось: если А, то Б
Так что даже если А неверно, то утверждение если А, то Б может быть верно. Прошу не натягивать соломенное чучело на мой комментарий.
Суть моего комментария в том, что вводимое понятие должно иметь практический смысл, а не в том, что якобы все функции - замыкания.
На моей памяти, когда речь заходила о замыкании, все понимали под этим термином одно и то же (а именно захват переменных внешней функции), что делает его понятием. Я не настаиваю на том, что это то же самое понятие, которое было изначально. Если уж на то пошло, то слово "замыкание" было ещё до программирования, как такового. Но мы почему-то не уходим в своей практике так далеко от того, что удобно и имеет смысл при решении проблем.
Если все функции - замыкания, и при этом замыканием не может быть ничто, кроме функции, то нет смысла вводить понятие замыкания, оно автоматически отсекается бритвой Оккама. Следовательно, нужно забыть про этот термин как ненужный, либо всё же вкладывать в него иной смысл, нежели чем просто синоним слова функция.
Очевидно, что любая функция может использовать внешние переменные. Причём, это верно практически для любого ЯП.
Прям "практически для любого ЯП"? Навскидку, это не так для Cи, C++, Java, PHP.
В языке может быть изоляция, ограничение доступа. Но полная невозможность для функций использовать внешние переменные - это ерунда какая-то. Возможно, вы говорите о чем-то другом.
Vitsliputsli, ну, по классике (в одном потоке) в стек кладутся значения параметров функции перед её вызовом, и там же выделяются временные переменные самой функции. Чем больше вложенных вызовов, тем больше растёт стек. Но каждое завершение (текущей) функции уменьшает стек в обратном порядке.
В случае с замыканием проблема в том, что временные переменные должны продолжить жить даже после завершения функции. Это противоречит определению стека. И выходом из положения может быть выделение памяти под переменные в куче, в которой уже не нужно следовать FIFO порядку.
Матвей Румынин, если вы имеете в виду то, как замыкания реализованы в памяти, то в стандарте ecma нет указаний на это. В каждой реализации js могут быть свои оптимизаторы. Также там не сказано про сборку мусора. Так что, к примеру, нет гарантии очистки циклических ссылок, даже если реализация строго следует стандарту.
В общем, если ваш вопрос не теоретический, а практический, то лучше интересоваться не стандартом, а тем, как работают замыкания в движке V8.
По-простому можно считать, что "захваченные" переменные выделяются не на стеке, а в куче. А уж как именно движок понимает, что произошел захват, я вам не подскажу. По программисту обычно как бы очевидно, что захвачено, а что - нет.
webratas, во-первых, хороший вопрос начинается с вопросительного слова: как, почему, зачем, сколько и т.д. У вас же просто констатация факта и приклеенный сбоку знак вопроса. Формальный ответ на такой вопрос будет: "Да, не отключается". И это будет верный ответ на текущую формулировку вопроса.
Во-вторых, не помешало бы добавить больше информации, скринов, уточнить версию винды, рассказать про свои безуспешные попытки найти решение, чтобы отвечающие не чувствовали себя воспитателями, а понимали, в чем конкретно затык. Простыню писать, конечно, тоже не стоит, но пока что вопрос выглядит так, словно вам тупо лень искать решение самостоятельно, поэтому и ответы такие.
Carburn, верно, с этим никто и не спорит. Однако ТС спрашивает именно про замыкания, а не про область видимости вообще. Поэтому не ясно, к чему был ваш коммент.
L1nw0od, это способ блокировки такой. Там нет внешнего VPN. Точнее в самой проге есть отдельный настоящий VPN, но это другая история, не связанная с рекламой, у меня выключено.
Resolut, тогда зачем ты читеришь? Ты же сам себя лишаешь пользы от самостоятельного решения задачи. Даже если ты три дня и три ночи будешь биться над задачей, это будет не зря. А когда берёшь готовое, обучение навыку практически не происходит.
Эх, к сожалению, статья 2013 года. Прошло уже почти 10 лет с тех пор. Язык и раньше бодро менялся, но с приходом Интернета он стал меняться крайне быстро.
Например, раньше на равных существовали "броузер" и "браузер", даже в книгах, но сейчас уже нет сомнений, что правильно - "браузер". Слишком уж популярное слово, быстро устаканилось.
А с "кэш" и "кеш" пока до конца не ясно. Не может рассудить и Гугл (11 млн. за "кэш" и 8 млн. за "кеш"). Нужен хороший лингвист, который рассудит и объяснит. В целом, я тоже склоняюсь к "кэш", но всё же считаю, что "кеш" пока ещё не является ошибкой в наше время. Википедия тоже допускает оба варианта.
Насчёт словаря, в орфографическом - другое написание.
Так об этом и речь. Если понятие не помогает разобраться в возникающих проблемах, то оно не нужно и его следует переопределить (или просто отказаться, как я писал выше). Так что и тимлид вполне может быть "официальным" источником, поскольку для понятия важно, чтобы все его понимали одинаково.
Конкретно для замыканий есть ряд типовых казусов, с которыми сталкиваются новички. Простое объявление одиночной функции к ним не относится. Напротив, это что-то из серии "что за?.." или "а так можно было?" после изучения основ. Поэтому всеобъемлющие определения предлагаю оставить теоретикам, а пользоваться теми, которые реально помогают отделить мух от котлет.