Изменение типа переменной в строгом режиме
Проходя тест PluralSight о JavaScript, я столкнулся с этим вопросом:
Предполагая, что вы включили строгость, можете ли вы изменить тип переменной после ее определения?
- Да, без ограничений
- Да, но вы должны переопределить переменную
- нет
Правильный ответ был Нет. Возможно, я неправильно понял вопрос, но для меня это говорит о том, что следующий код будет недействительным:
function test() {
"use strict";
let x = 12; // x is a number
x = "hello world"; // x is now a string
return x;
}
console.log(test());
Быстрый тест в Chrome, Firefox и Edge отлично выполняет приведенный выше код. Я также рассмотрел Приложение C в спецификации ECMAScript 2016 (при условии, что это правильный документ) и не нашел там упоминаний об ограничении типа переменной в строгом режиме.
Я что-то здесь пропустил или неправильно понял? Или вопрос некорректен или, возможно, вводит в заблуждение?
2 ответа
Вопрос не понятен без контекста. Что они подразумевают под "переменной" и что они подразумевают под "типом"?
Они могут ссылаться на что угодно, хотя обычно мы понимаем эту фразу как сокращение от "типа значения (значений), которое содержит переменная (в настоящее время)" (хотя само "тип" является неоднозначным, означая либо тип, либо typeof
) - и, конечно, большинство переменных могут изменять свои значения и тип.
Он мог ссылаться на свойства самой переменной - например, ее изменчивость, вид привязки, область (запись), в которой она хранится, - которые обычно не меняются.
Здесь x - глобальная переменная, вне функции она всегда возвращает значение глобальной переменной. Вы не можете повторно объявить переменную, используя ключевое слово let в той же области, но в другой области, которую вы можете сделать, которая может быть строгой или нет
function test() {
"use strict";
let x = 12; // x is a number
//let x = "hello world"; // you can't do like this
return x;
}
let x = "hello world"; // its ok
console.log(test());