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 到单个文件,则可以避免使用全局范围。
(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
。这将提高可读性并帮助您进行调试。
我迫切需要您的帮助来理解。 在第一个示例中,我的测试脚本正常工作。 在第二个中,我将这两个部分打包成一个函数,并在控制台中显示以下错误:
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 到单个文件,则可以避免使用全局范围。
(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
。这将提高可读性并帮助您进行调试。