Я следую инструкциям Javascript для разработчиков Mozilla, и есть сегмент на переменном хостинге. В учебном пособии в какой-то момент упоминается использование Firefox Scratchpad для редактирования javascript для быстрого сохранения и просмотра кода.
Код, который я использовал (скопировать вставку из учебника):
/**
* Example 1
*/
console.log(x === undefined); // true
var x = 3;
/**
* Example 2
*/
// will return a value of undefined
var myvar = 'my value';
(function() {
console.log(myvar); // undefined
var myvar = 'local value';
})();
Однако console.log(x === undefined)
возвращает false
. И если я запустил console.log(x);
вместо этого он фактически возвращает 3
. console.log(myvar);
ниже возвращает неопределенные, как ожидалось.
Я смущен как то, что предполагается здесь, это документация, возможно, неправильная/устаревшая или Scratchpad интерпретирует этот код иначе, чем стандартный JavaScript, и если да, то почему? Я попытался запустить файл.js, и я получаю результаты, как ожидалось.
В непосредственной функции, вы повторно объявил myvar
переменную:
(function() {
console.log(myvar); // undefined
var myvar = 'local value';
})();
Таким образом, глобальная переменная myvar
из области window
будет поднята, поэтому она возвращает undefined
в console.log(myvar);
,
С другой стороны, если вы замените его на console.log(x);
, он будет печатать 3
потому что вы не обновили переменную x
.
Твоя проблема:
И для первого console.log(x === undefined);
выражение, он возвращает false
, только если вы повторно выполнить его, так что, возможно, в вашем случае это было выполнено дважды.
window
), поэтому после определенияx
она остается определенной. Вы можете обернуть весь этот код в большую немедленно выполняемую функцию, чтобы убедиться, что вы начинаете с чистого контекста.x
был бы уже инициализирован с3
на втором (и всех последующих) прогонах.