如何使函数全局变量?

Muj*_*KAS 6 javascript

以下是我的javascript函数,我想使用变量选择 外部函数,但我在inspect元素的控制台中选择了未定义的错误.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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 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);
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    属性window是全局变量(您可以window.在它们前面或不在它们之前访问它们).

但是,我会避免让它变得全球化.要么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;
}
Run Code Online (Sandbox Code Playgroud)

......然后你需要它:

var selected = showMe();
Run Code Online (Sandbox Code Playgroud)

...或在包含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...
})();
Run Code Online (Sandbox Code Playgroud)

外部匿名函数是一个"范围函数",这意味着它selected不是全局的,它对于该函数中的任何东西都是常见的.

  • 感谢您保持一定程度的答案质量. (2认同)