Переменные 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 только если вы выполните его повторно, так что, возможно, в вашем случае это было выполнено дважды.

Другие вопросы по тегам