Javascript 1.引用错误:未定义函数。2.数组未传递到函数中

Javascript 1.引用错误:未定义函数。2.数组未传递到函数中,javascript,html,jsfiddle,Javascript,Html,Jsfiddle,我有一个非常基本的jsfiddle。我得到函数的引用错误。我不明白这样做的原因。以下是JSFIDLE: 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: 点击我

我有一个非常基本的jsfiddle。我得到函数的引用错误。我不明白这样做的原因。以下是JSFIDLE:

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:


点击我!

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

尝试将它绑定到窗口,就像这样

window.f1 = function(){
    var str = "aaa,bbb,ccc,ddd,eee,fff";
    var strArr = str.split(",");
    f2(strArr,strArr.length);
}
当fiddle设置为onLoad时,它会在
窗口中包装代码。onLoad=function(){/*code*/}
,这意味着范围不再是全局的

我在申请中面临的真正问题是当我通过考试时 数组传递给f2,只有第一个元素传递给f2,而不是整个元素 数组


正在传递数组,只是alert()将其格式设置为与显示的原始字符串完全相同,这有误导性。尝试向arr[0]或arr[1]发出警报。

这是范围问题,Joseph的方法正确。

解释

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

 <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>

函数f1(){
var str=“aaa、bbb、ccc、ddd、eee、fff”;
var strArr=str.split(“,”);
f2(横向,横向长度);
}
功能f2(arr、len){
警报(len);
警报(arr);
}
点击我!
这意味着,如果您在浏览器解释时首先声明javascript代码,它将能够找到您的函数


函数f1(){
var str=“aaa、bbb、ccc、ddd、eee、fff”;
var strArr=str.split(“,”);
f2(横向,横向长度);
}
功能f2(arr、len){
警报(len);
警报(arr);
}
点击我!

在javascript面板的右上角->单击设置图标->将
加载类型更改为
无换行
值有很多重复项--您还可以看到,谢谢,它甚至可以使用f1=function(){……}。你能解释一下这背后的原因吗?为什么它不能使用函数f1(){…}?正如Arun所说,加载类型被设置为onLoad。On load将代码包装在
窗口中。onload=function(){}
,这意味着您的函数不再在全局范围中定义。
 <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>