Переменные Javascript не ведут себя так, как ожидалось в Scratchpad
Я следую учебному пособию по JavaScript для разработчиков Mozilla, и есть сегмент, посвященный переменному хостингу. В учебнике в какой-то момент упоминается использование Scratchpad Firefox для редактирования 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, и я получаю результаты, как и ожидалось.
1 ответ
В функции Immediate вы повторно объявили 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
только если вы выполните его повторно, так что, возможно, в вашем случае это было выполнено дважды.