объявить переменную без нашего var внутри функции в JavaScript - PullRequest
0 голосов
/ 30 октября 2019

В JavaScript выполнение кода происходит в 2 этапа. На первом шаге он читается, и место зарезервировано для переменных (изначально значение undefined) и функций. На втором этапе это выполняется построчно.

А также я прочитал, что переменные, объявленные без ключевого слова var, установлены как Global переменных.

Так что, если я распечатаю переменную до ее определения внутри функции, она должна вывести undefined. Как в коде ниже:

b();

console.log(a);
console.log(d);
var a = 'Hello World!';

function b() {
  console.log(c);
  console.log('Called b!');
  var c = "variable c is printed";
  console.log(c);
  console.log(d);
  d = "Variable d is printed";
}

Я ожидаю, что результат будет:

undefined
Called b!
variable c is printed
undefined
Variable d is printed

Но я получаю следующий вывод:

undefined
Called b!
variable c is printed
Uncaught ReferenceError: d is not defined
    at b (app.js:12)
    at app.js:1

Так что мои сомнениято есть, когда вызывается функция b, то на первом этапе выполнения кода переменной d должны быть заданы пробел и значение undefined изначально. И тогда выполнение должно начинаться построчно на втором этапе.

Ответы [ 2 ]

3 голосов
/ 30 октября 2019

А также я прочитал, что переменные, объявленные без ключевого слова var, задаются как глобальные переменные.

Да, вроде. Случается так, что если вы выполняете присваивание, например

 d = 1;

Двигатель проходит все записи окружения (место, где значения переменных хранятся во время выполнения), поэтому в вашемВ этом случае сначала идет к записи b, а затем к глобальной записи. Если он находит привязку переменной (имя -> значение) в одной из этих записей (которые были созданы при запуске, как вы сказали), он затем сохраняет значение там. Однако, если он достигает глобальной записи и не обнаруживает привязку по пути (переменная undeclared ), он просто создает новую привязку для этой глобальной записи.

Итак,когда вы делаете console.log(d), привязка для d не существует, и доступ к d не выполняется.

0 голосов
/ 30 октября 2019

В первой фазе при попытке установить пространство для переменных. Найти их по ключевым словам:

var/let/const

Если вы не используете его во второй фазе, указатель сбойных переменных там, где для них нет места, В области действия функцииУ меня нет места и точка сбоя.

этот код показывает, что произошло:

console.log(a);
a = 'Some Value For A Variable';

, чтобы решить два решения:

1 - использовать ключевые слова

console.log(a);
var a = 'Some Value For A Variable';

2- Сначала инициализация

a = 'Some Value For A Variable';
console.log(a);

Лучший понятный код сложен из двух решений: * используйте ключевые слова * вызывайте переменные после определения

var a = 'Some Value For A Variable';
console.log(a);

Удачи

...