Причина, по которой он говорит, что y не определена, если вы пытаетесь отобразить переменную без настроек, это потому, что строка y = x
действует как var y = x
, которая определяет переменную y.Если эта строка не была выполнена до того, как вы попытались ее отобразить (чего не произойдет, если вы попытаетесь отобразить ее первой), то var y
никогда бы не произошло, что выдает ошибку.Чтобы это исправить, вы должны определить y перед остальным.
Фрагмент ниже будет "локальной переменной".По сути, он просто переопределяет y при каждом выполнении функции.
function sety(x) {
var y;
if (x > 0) y = x;
else alert(y);
}
<button onclick="sety(222)">SET Y to 222</button>
<button onclick="sety(333)">SET Y to 333</button>
<button onclick="sety(0)">display the Y variable</button>
Фрагмент ниже будет определять y, только если он уже не определен.
function sety(x) {
if (x > 0) y = x;
else {
if (typeof y == 'undefined') {
var y;
}
alert(y);
}
}
<button onclick="sety(222)">SET Y to 222</button>
<button onclick="sety(333)">SET Y to 333</button>
<button onclick="sety(0)">display the Y variable</button>
Теперь я бы не советовал использовать код, который вы использовали.Ниже приведен фрагмент кода, который вы должны использовать.
function sety(x) {
y = x;
}
function gety() {
if (typeof y == 'undefined') {
y = 'undefined';
}
alert(y);
}
<button onclick="sety(222)">SET Y to 222</button>
<button onclick="sety(333)">SET Y to 333</button>
<button onclick="gety()">display the Y variable</button>