关于javascript:如何创建一个函数全局变量?

How to make a variable which is inside a function global?

下面是我的javascript函数,我想使用变量selected outside函数,但是我在inspect元素的控制台中得到selected not defined error。window.yourglobalvariable没有解决我的问题。

1
2
3
4
5
6
7
8
function showMe(pause_btn) {
    var selected = [];
    for (var i = 0; i < chboxs.length; i++) {
        if (chboxs[i].checked) {
            selected.push(chboxs[i].value);
        }
    }
}


如果你真的希望它是全球性的,你有两个选择:

  • 全局声明,然后在函数中关闭var

    1
    2
    3
    4
    5
    6
    7
    8
    9
    var selected;
    function showMe(pause_btn) {
        selected = [];
        for (var i = 0; i < chboxs.length; i++) {
            if (chboxs[i].checked) {
                selected.push(chboxs[i].value);
            }
        }
    }
  • 转让给window财产

    1
    2
    3
    4
    5
    6
    7
    8
    function showMe(pause_btn) {
        window.selected = [];
        for (var i = 0; i < chboxs.length; i++) {
            if (chboxs[i].checked) {
                selected.push(chboxs[i].value); // Don't need `window.` here, could use it for clarity though
            }
        }
    }

    window的一个属性是全局变量(您可以在它们前面使用或不使用window.访问它们)。

  • 但是,我会避免全球化。或者让showMe返回信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    function showMe(pause_btn) {
        var selected = [];
        for (var i = 0; i < chboxs.length; i++) {
            if (chboxs[i].checked) {
                selected.push(chboxs[i].value);
            }
        }
        return selected;
    }

    …然后在需要的地方:

    1
    var selected = showMe();

    …或在包含showMe的范围内声明,但不在全球范围内。没有上下文,这看起来与上面的1完全相同;这里有一点上下文:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    (function() {
        var selected;
        function showMe(pause_btn) {
            selected = [];
            for (var i = 0; i < chboxs.length; i++) {
                if (chboxs[i].checked) {
                    selected.push(chboxs[i].value);
                }
            }
            return selected;
        }

        // ...other stuff that needs `selected` goes here...
    })();

    外部匿名函数是一个"作用域函数",这意味着selected不是全局函数,它只是该函数中的任何内容的公共函数。


    不要使用这个;

    1
     selected = [];

    这是一个javascript的漏洞

    1
    window.selected = [];

    在你的功能里面。


    这样做:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var selected;

    function showMe(pause_btn) {
        selected = [];
        for (var i = 0; i < chboxs.length; i++) {
            if (chboxs[i].checked) {
                selected.push(chboxs[i].value);
            }
        }
    }

    实际上,您可以跳过var selected;行,但我更喜欢声明变量。


    如果将selected声明为window对象的属性,则可以从其他任何地方访问它。

    1
    2
    3
    4
    5
    6
    7
    8
    function showMe(pause_btn) {
      window.selected = [];
      for (var i = 0; i < chboxs.length; i++) {
        if (chboxs[i].checked) {
          selected.push(chboxs[i].value);
        }
      }
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    var selected = [];
    function showMe(pause_btn) {

        for (var i = 0; i < chboxs.length; i++) {
            if (chboxs[i].checked) {
                selected.push(chboxs[i].value);
            }
        }
    }

    可以在定义了名为showMe的函数的作用域中定义名为selected的数组。

    在代码方面:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    var selected = [];

    function showMe(pause_btn) {
        for (var i = 0; i < chboxs.length; i++) {
            if (chboxs[i].checked) {
                selected.push(chboxs[i].value);
            }
        }
    }