Код
function hi() {
myvar = 'local variable';
}
console.log(myvar);
Выход: ReferenceError: myvar не определен
По моему мнению, javascript идет по строкам, анализирует переменные и их объем. Помня об этом, не следует, чтобы следующая печать была "неопределенной", поскольку myvar существует в глобальном масштабе?
Нет, этого не должно быть, поскольку для печати undefined вам нужно сначала определить его в глобальной области.
Тот факт, что вы назначаете какое-то значение этой переменной внутри функции, ничего не значит до тех пор, пока сама функция не будет выполнена.
var myvar;
function hi() {
myvar = 'local variable';
}
console.log(myvar);
Если вы опустите этот var myvar;
line и выполнить функцию hi
до того, как вы выполните console.log
, в результате вы получите "local variable"
потому что эта функция создает неявное глобальное связывание.
Чтобы проверить это, просто используйте strict mode
и вы получите ошибку вместо результата выше, потому что строгий режим предотвращает неявные глобальные переменные.
"use strict";
function hi() {
myvar = 'local variable';
}
hi();
console.log(myvar);
Вы можете объявить переменную тремя способами:
С ключевым словом var. Например, var x = 42. Этот синтаксис может использоваться для объявления как локальных, так и глобальных переменных.
Просто присваивая ему значение. Например, x = 42. Если эта форма используется вне функции, она объявляет глобальную переменную. Он генерирует строгое предупреждение JavaScript. Вы не должны использовать этот вариант.
С ключевым словом let. Например, пусть y = 13. Этот синтаксис может быть использован для объявления локальной переменной-блока. См. Раздел "Переменная" ниже.
Ваша функция будет работать, потому что она удовлетворяет методу # 2, объявляя переменную, присваивая ей значение.
console.log(myvar)
не будет работать, поскольку myvar
никогда не был объявлен ни одним из трех способов, упомянутых выше. Таким образом, вы получаете ReferenceError
.
По моему мнению, javascript идет по строкам, анализирует переменные и их объем. Помня об этом, не следует, чтобы следующая печать была "неопределенной", поскольку myvar существует в глобальном масштабе?
Нет, функция не вызывалась, и поэтому код внутри нее не выполнялся, поэтому переменная никогда не создавалась. Если у вас есть myvar = 'local variable';
вне функции, он будет работать.
ReferenceError
function hi() {
myvar = 'local variable';
}
console.log(myvar);
Я понимаю, вы думали, что получите undefined
.
В приведенном выше коде myvar
не был определен вне области функции. Поэтому при вызове console.log(myvar)
он выдаст ошибку. Вы можете игнорировать объявление функции для этой части, как если бы вы имели:
console.log(myvar)
myvar
вне области действияПоэтому вам необходимо определить свою переменную перед ее регистрацией, например:
var myvar;
function hi() {
myvar = 'local variable';
}
console.log(myvar);
Это обеспечит определение myvar
здесь
вне области действия: он не имеет никакого значения, поэтому он undefined
в области функций: она установлена в строку
Поскольку вы не добавили оператор var
перед myvar = 'local variable';
вы по существу получили доступ к глобальной переменной myvar
. Поэтому, вызывая hi()
вы измените значение myvar
вне области действия:
var myvar;
function hi() {
myvar = 'local variable';
}
console.log(myvar);
hi();
console.log(myvar);
Это связано с тем, что область переменных локальна для функции. попробуйте сначала объявить переменную.
var myvar;
function hi() {
myvar = 'local variable';
}
console.log(myvar);
var
переменная myvar
не будет локальной для hi
undefined
самом деле. Вопрос в том, почему не ведется журнал неundefined
(вместо этого у него есть сообщение об ошибке)