Javascript-使局部变量像全局变量一样

时间:2019-03-02 17:09:19

标签: javascript error-handling global-variables local-variables

我正在学习局部和全局变量。在此程序中,我的函数执行2件事。如果在函数中输入一个大于0的数字,则它将sets Y变量。如果传递0,则displays是Y变量。

function sety(x) {
  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是全局变量。如果我想创建一个不包含全局变量的程序怎么办?如果我将var y放在函数中,则将其设置为本地,对吗?但这不起作用。

我还有第二个问题。如果在设置变量之前单击“显示”按钮,则会出现错误。我尝试添加if(x=="undefined"),但这仍然给我一个错误。在那种情况下我该如何防止错误。

4 个答案:

答案 0 :(得分:3)

创建一个闭合。

(function() {
    var y; // y is now local to this closure
    window.sety = function(x) {
        // however you still want sety() to be a global function,
        // so you have to do this explicitly
        if( x > 0) y = x;
        else alert(y);
    };
})();

我将注意到让函数做两件事通常是一个坏主意-尤其是带有“ set y”之类的名称。考虑将其分为两个功能sety(x)gety(),后者返回该值,而不只是警告它。

答案 1 :(得分:0)

您可以向该函数添加属性并更新它。

function sety(x) {
    if (x > 0) {
        sety.y = x;
    } else {
        alert(sety.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>

答案 2 :(得分:0)

如果您尝试不设置显示变量而显示y的原因是未定义,那是因为行y = x的行为类似于定义变量y的var y = x。如果在尝试显示该行之前未执行该行(如果您先尝试显示该行则不会执行),那么var y永远不会发生,这会给您带来错误。要解决此问题,必须在else之前定义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>

答案 3 :(得分:0)

您可以按以下方式访问该变量:window.y,因为您在执行window时会隐式设置y = x对象。

这是为了克服未定义变量的问题

function sety(x) {
  if (x > 0) y = x;
  else alert(window.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>