Почему объявление переменной JavaScript на консоли приводит к «неопределенному»
При объявлении переменной в консоли JavaScript с использованием синтаксиса var a;, он печатает «неопределено». Такое поведение может быть неожиданным и часто рассматривается в сообщениях о переполнении стека. Однако эти обсуждения не могут полностью объяснить, почему это происходит.
Поведение консоли является прямым результатом того, как JavaScript оценивает выражения. При вычислении оператора var a; JavaScript считает его самостоятельным выражением и возвращает результат, который действительно является «неопределенным».
Еще более загадочно, почему консоль также печатает «неопределенное» при объявлении переменной с начальным значением, например var a = 3. Удивительно, но все операторы объявления переменных в JavaScript (как var, так и функции) возвращают «неопределенное», если существует другой оператор с «реальным» результатом.
Например :
> var a = 3; undefined > var a = 3; a = 4; 4 > var a = 3; a = 4; var a = 5; function f() {}; 4
Это поведение основано на операторе eval, который, согласно спецификации ECMAScript:
Вычисление оператора var a = 4 возвращает значение (нормальное, пустое, пустое), что удовлетворяет критериям возврата «неопределенного».
Однако функция eval также указывает, что если значение завершения оцениваемой программы не пусто, то возвращается значение последнего оператора. В последнем примере a = 4 является последним оператором, поэтому возвращается его значение (4).
Подводя итог, консоль JavaScript печатает «неопределенное» для объявлений переменных, потому что эти объявления возвращают «неопределенное» при оценке как выражения. Такое поведение может сбивать с толку, особенно при присвоении начальных значений переменным, но оно обусловлено базовыми механизмами оценки выражений и операторов JavaScript.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3