Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从javascript闭包外部访问数组变量?_Javascript - Fatal编程技术网

如何从javascript闭包外部访问数组变量?

如何从javascript闭包外部访问数组变量?,javascript,Javascript,有没有办法访问javascript闭包中声明的变量 <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Insert title here</title> <script type="text/javascript"> var CLOSURE_VAR = (function() { var privateVar = {

有没有办法访问javascript闭包中声明的变量

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<script type="text/javascript">
var CLOSURE_VAR = (function() {

        var privateVar = {
                arr: []
            };
    return {
        setVar: function(name,name2) {
            privateVar['arr'][name] = name2;
        },
        getVar: function(name) {
            return privateVar['arr'][name];
        },
        getPrivateVar: function(name) {
            return privateVar[name];
        }
    };

}());
function initializeArr(name) {
    CLOSURE_VAR.setVar(name,"y");
    CLOSURE_VAR.setVar("def","z");
} 
function checkVar(name) {
    alert(CLOSURE_VAR.getVar(name));
    console.log(CLOSURE_VAR.getPrivateVar('arr')+"--------------------");
    alert(CLOSURE_VAR.getVar("def"));
}
</script>
</head>
<body onload="initializeArr('abc')">
    <a href="#" onclick="checkVar('abc')">hello</a>
</body>
</html>
在页面加载时,我将值插入数组。当我点击这个链接时,我想得到一个数组,其中包含[abc:y,def:z]这样的数据,但是MODULE.getPrivateVar'arr'返回空白

您将arr声明为数组而不是对象

运行以下代码段:

var闭包_var=函数{ var privateVar={ arr:{} }; 返回{ setVar:functionname,name2{ privateVar['arr'][name]=name2; }, getVar:functionname{ 返回privateVar['arr'][name]; }, getPrivateVar:functionname{ 返回privateVar[name]; } }; }; 函数初始化名{ 闭包_VAR.setVarname,y; 关闭变量setVardef,z; } 函数checkVarname{ console.logCLOSURE_VAR.getVarname; console.logJSON.stringifyCLOSURE_VAR.getPrivateVar'arr'+------------; console.logCLOSURE_VAR.getVardef; } 缩写为“abc”;
模块定义在哪里?privateVar['arr'][iName]=name2;-在南是什么?参数是name和name2。模块不存在,您的意思是CLOSURE\u VAR,而且您的CLOSURE\u VAR定义错误。在初始化之前,你要写};它应该是};对不起,输入错误。我改正了。@ManasB很好!:-但是,如果我使用object而不是Arraynative,会不会导致性能问题?@ManasB不,事实上,你会得到好处,因为对象是优化的键值对结构。