如何在 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 = {
                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 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) {
  console.log(CLOSURE_VAR.getVar(name));
  console.log(JSON.stringify(CLOSURE_VAR.getPrivateVar('arr')) + "--------------------");
  console.log(CLOSURE_VAR.getVar("def"));
}
initializeArr('abc');
<a href="#" onclick="checkVar('abc')">hello</a>

你看?现在正在打印对象。

  • 我已将arrArray[]更改为Object{}.
  • 我使用 stringify 将该对象的版本作为字符串获取。

最新更新