如何使函数全局变量?

时间:2015-04-18 08:03:51

标签: javascript

以下是我的javascript函数,我想使用变量 选择 外部函数,但我在控制台中得到选择未定义错误检查元素。 window.yourGlobalVariable并没有解决我的问题。

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

7 个答案:

答案 0 :(得分:13)

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

  1. 全局声明它,然后在函数中关闭var

    var selected;
    function showMe(pause_btn) {
        selected = [];
        for (var i = 0; i < chboxs.length; i++) {
            if (chboxs[i].checked) {
                selected.push(chboxs[i].value);
            }
        }
    }
    
  2. 分配到window属性

    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.访问它们。)

  3. 但是 ,我会避免让它全球化。要么showMe 返回信息:

    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;
    }
    

    ......然后你需要的地方:

    var selected = showMe();
    

    ...或在包含showMe的范围内声明它,但在全局范围内。没有上下文,看起来与上面的#1完全相同;这里有一点背景:

    (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...
    })();
    

    外部匿名函数是一个&#34;范围函数&#34;这意味着selected不是全球性的,它对于该函数中的任何事物都是常见的。

答案 1 :(得分:2)

我建议不要在函数外部创建自己的对象,然后从那里分配变量,而不是将其分配给窗口对象或在函数外部声明它。这样可以避免使窗口对象混乱,并将所有全局变量放在一个位置,使它们易于跟踪。 例如,

var globalObject {}
function MyFunction {
  globalObject.yourVariableName=what your variable is
}

答案 2 :(得分:1)

这样做:

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;行,但我更喜欢声明我的变量。

答案 3 :(得分:1)

不要使用它;

 selected = [];

这是javascript的错误

window.selected = []; 

你的功能。

答案 4 :(得分:0)

您可以在定义名为selected的函数的范围内定义名为showMe的数组。

就代码而言:

var selected = [];

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

答案 5 :(得分:0)

var selected = [];
function showMe(pause_btn) {

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

答案 6 :(得分:0)

如果您将selected声明为窗口对象上的属性,则可以从其他任何位置访问它。

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