javascript函数数组变量函数schicken

javascript function array variable an function schicken

我迫切需要您的帮助来理解。 在第一个示例中,我的测试脚本正常工作。 在第二个中,我将这两个部分打包成一个函数,并在控制台中显示以下错误:

Uncaught ReferenceError: test is not defined : test_js.html:26

请问,2nd函数中的数组如何读出?

问题

我有两个函数。一个带有数组,一个带有写函数。我喜欢将函数 1 中的变量显示在函数 2 中。希望您理解我的问题?!​​

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<script language="javascript">
 
var test = new Array();

for(a=0; a<19;a++) {

test[a]= " bla bla "+a;
 }
 
</script>
<body>

 
<div>
<script language="javascript">
 
 
for(b=0; b<test.length;b++){
document.write('<a href="'+test[b]+'">'+test[b]+'</a><br><hr>');
} 

</script>
 </div>
</body>
</html>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<script language="javascript">
function a(){
var test = new Array();

for(a=0; a<19;a++) {

test[a]= " bla bla "+a;
 }
}

 a();
</script>
<body>

 
<div>
<script language="javascript">
function zeig(){
 
for(b=0; b<test.length;b++){
document.write('<a href="'+test[b]+'">'+test[b]+'</a><br><hr>');
}}
zeig();

</script>
 </div>
</body>
</html>

几点建议:

  • 污染全局范围是一种不好的做法,所以尽量避免。 Why to avoid global variables
  • 当您在没有 var 的情况下声明变量时,它们默认成为全局变量。
  • 在循环中附加 DOM 是一种不好的做法。您应该创建一个 HTML 字符串并执行批量操作。

此外,如果可以将 JS 移出 HTML 到单个文件,则可以避免使用全局范围。

JSFiddle

(function() {
  // This is not a global variable. Its scope is limited to functions defined in IIFE
  var TEST = new Array();

  function a() {
    for (var a = 0; a < 19; a++) {
      TEST.push(" bla bla " + a);
    }
  }
  a();

  function zeig() {
    var _html = TEST.reduce(function(p, c) {
        return p + '<a href="' + c + '">' + c + '</a><br><hr>'
      }, "")
      /*for (var b = 0; b < TEST.length; b++) {
        _html += '<a href="' + TEST[b] + '">' + TEST[b] + '</a><br><hr>'
      }*/
    document.getElementById("content").innerHTML = _html;
  }

  window.addEventListener("load", zeig);
})()
<body>
  <div id="content">
  </div>
</body>

注意:我使用了 array 函数(array.reduce),但也保留了 for 逻辑作为注释。您可以稍后查找这些功能。您还会注意到我已将 test 重命名为 TEST。按照惯例,您应该对全局变量使用 all caps。此外,如果您使用全局变量,则应使用 window.VariableName。这将提高可读性并帮助您进行调试。