【问题标题】:javascript function array variable an function schicken [closed]javascript函数数组变量一个函数schiken [关闭]
【发布时间】:2016-08-10 14:33:27
【问题描述】:

ich brauche dringend Eure Hilfe,zur Verständnis。 我 1.Bespiel funktioniert mein 测试脚本正常。 im 2. habe ich die beiden Abschnitte in jeweils eine Funktion gepackt und in der Console folgender Fehler angelzeigt:

未捕获的 ReferenceError:未定义测试:test_js.html:26

Frage, wie kann ich denn die Arrays in der 2. Funktion auslesen?

问题

我有两个功能。一个带有数组,一个带有写入功能。我喜欢将函数 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>

【问题讨论】:

  • 虽然我很喜欢学习德语,但如果你用英语发帖,你会得到更多的回复。
  • 问题是testfunction a 中定义,并且仅在a 中可用。您必须将其设为全局或将其作为参数传递。
  • 你的问题是测试的范围是函数'a',它不是一个全局变量。
  • 对不起。我尝试...我有两个功能。一个带有数组,一个带有写入功能。我喜欢将函数 1 中的变量显示在函数 2 中。希望你能理解我的问题?!​​
  • 好的,拉杰什。但是如何让它全球化呢?认为如果它声明为 VAR=TEST 它是全局的?!

标签: javascript arrays function document.write


【解决方案1】:

几个指针:

  • 污染全局范围是一种不好的做法,所以尽量避免它。 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。这将提高可读性并帮助您进行调试。

【讨论】:

  • 最好把你的示例代码和你的答案放在一起。
  • @gearsdigital 确定。我稍后会更新它。
  • 嘿 Rajesh,这看起来很不错。谢谢你。我尝试将它嵌入到我的脚本中。
  • @gearsdigital 我已经更新了我的答案。如有遗漏请注明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 2016-04-11
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
相关资源
最近更新 更多