#javascript
Что выведется в консоль при выполнении этого кода? Почему? (function test() { test = 123; console.log( test ); }()) В консоль выведется эта функция: function test() { test = 123; console.log( test ) ;} Почему так происходит?
Ответы
Ответ 1
Согласно этой статье, перезаписать имя NPE, доступное внутри самого NPE и используемое для рекурсивного вызова (вместо устаревшего arguments.callee), нельзя. В MDN, к сожалению, про запрет переписывания ничего не сказано, однако практика (ваш пример) говорит о том, что это всё же верное утверждение. Поэтому test = 123; не даёт никакого эффекта, и console.log выводит первоначальное значение test - само NPE.Ответ 2
В стандарте описан процесс вычисления именованного функционального выражения Внутри тела имя функционального выражения будет являться immutable binding и при включенном Strict Mode при попытке изменить его будет ошибка времени выполнения. Так как у вас не используется "use strict"; Strict Mode выключен и присваивание просто игнорируется. Чтобы на консоль вывелось ожидаемое значение необходимо объявить test локально с помощью ключевого слова var (function test() { var test = 123; console.log( test ); }())
Комментариев нет:
Отправить комментарий