代码之家  ›  专栏  ›  技术社区  ›  CheeseFlavored

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

  •  0
  • CheeseFlavored  · 技术社区  · 7 年前

    我正在学习局部和全局变量。在这个程序中,我的函数做两件事。如果在函数中输入大于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 在函数中,它是局部的,对吧?,但不起作用。

    我还有第二个问题。如果在设置变量之前单击display按钮,就会出现错误。我试着加上 if(x=="undefined") 但那还是给了我一个错误。我如何防止这种情况下的错误。

    4 回复  |  直到 7 年前
        1
  •  3
  •   Niet the Dark Absol    7 年前

    创建一个闭包。

    (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() ,与后者 返回 而不是仅仅提醒它。

        2
  •  0
  •   Nina Scholz    7 年前

    您可以将属性添加到函数并对其进行更新。

    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>
        3
  •  0
  •   Aniket G    7 年前

    它之所以说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=“set y(222)”>将y设置为222</button>
    <button onclick=“set y(333)”>将y设置为333</button>
    <button onclick=“sety(0)”>显示Y变量</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>
        4
  •  0
  •   Ele    7 年前

    您可以访问如下变量: 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>