1. Reference Error: Function not defined. 2. Array not getting passed into a function

1. Reference Error: Function not defined. 2. Array not getting passed into a function

我有一个非常基本的 jsfiddle。我收到函数的引用错误。我不明白同样的原因。这是 jsfiddle:

https://jsfiddle.net/akshaysuri/xxmq8e3m/

JavaScript:

function f1(){
    var str = "aaa,bbb,ccc,ddd,eee,fff";
    var strArr = str.split(",");
    f2(strArr,strArr.length);
}

function f2(arr,len){
  alert(len);
  alert(arr);
}

HTML:

 <body>
 <button type="button" onclick="f1()">Click Me!</button> 
 </body>

我在我的应用程序中面临的真正问题是,当我将数组传递给 f2 时,只有第一个元素而不是整个数组传递给 f2。我试图使用 jsfiddle 对其进行测试,但首先我需要解决引用错误。

尝试像这样将它绑定到 window

window.f1 = function(){
    var str = "aaa,bbb,ccc,ddd,eee,fff";
    var strArr = str.split(",");
    f2(strArr,strArr.length);
}

由于 fiddle 设置为 onLoad,它将您的代码包装在 window.onload=function(){/*code*/} 中,这意味着作用域不再是全局的。

The real problem I am facing in my application is that when I pass the array to f2, only first element is passed to f2 and not the entire array.

正在传递数组,只是 alert() 将它的格式完全按照您显示的原始字符串进行格式化,这是一种误导。尝试提醒 arr[0] 或 arr[1].

范围问题,约瑟夫走对了

解释

如果您使用 window 变量,您可以强制使用全局范围。 但是您可以更改声明顺序以更正您的代码。

 <body>
 <script>
 function f1(){
    var str = "aaa,bbb,ccc,ddd,eee,fff";
    var strArr = str.split(",");
    f2(strArr,strArr.length);
}

function f2(arr,len){
  alert(len);
  alert(arr);
}
 </script>
 <button type="button" onclick="f1()">Click Me!</button> 
 </body>

这意味着如果您在浏览器解释时先声明您的 javascript 代码,它将能够找到您的函数。

 <body>
 <script>
 function f1(){
 var str = "aaa,bbb,ccc,ddd,eee,fff";
 var strArr = str.split(",");
 f2(strArr,strArr.length);
}

function f2(arr,len){
  alert(len);
  alert(arr);
}
 </script>
 <button type="button" onclick="f1()">Click Me!</button> 
 </body>