JS功能未定义?

时间:2013-07-30 15:33:47

标签: jquery

为什么当我触发一个函数时会抛出一个未定义的错误?我有一个带有我所有脚本的外部js文件,以及一个触发onchange函数的html div。

我已将JS文件包含在页面顶部,而我调用的函数是JS文件中的第一个函数。为什么它会以未定义的形式返回?我的其他功能似乎工作正常。

我的所有函数都在一个

中的外部JS文件中
$(document).ready(function(){ 

});

我认为JS是预编译的,并且声明函数等的顺序并不重要。

实施例: JS:

function makeIcon3D() {
   var icon3DStroke1 = getStrokefor3DIcon1();

       function getAlert() {
         alert('hi');
      }

 });

HTML:

<input type=text onchange=makeIcon3D();>

5 个答案:

答案 0 :(得分:2)

您的代码是这样的:?

$(document).ready(function(){ 
    function foo() {
        alert("bar");
    }
});
foo(); // <-- foo is not defined here

由于ready在第一个初始事件循环事件之后触发,因此无效:

var foo;
$(document).ready(function(){ 
    foo = function() {
        alert("bar");
    }
});
foo(); // <-- foo is still undefined here

你需要做这样的事情:

var foo;
$(document).ready(function(){ 
    foo = function() {
        alert("bar");
    }
});
$(document).ready(function(){ 
    foo(); // "bar"
});

这些问题源于糟糕的范围,将事物置于全球范围内,不应该是全球性的,反之亦然。找出你想要代码的位置。

答案 1 :(得分:0)

在另一个函数中定义的函数是包含函数的函数的局部函数,并且不存在于函数外部。

无论如何,您都不需要$(document).ready(function() {...}来定义函数,因为它们只是通过定义而不对DOM做任何事情。

答案 2 :(得分:0)

Javascript不是预编译的,它被认为是JIT(只是及时编译)。

您的javascript函数可能包含语义错误,无法编译,因此无法引用。

此外,您的功能可能超出了范围,正如其他答案所描述的那样。

答案 3 :(得分:0)

尝试使用$("#someId").bind('change', function() { //handler...

绑定您的事件处理程序

另外,将html属性包装在引号中。

答案 4 :(得分:0)

我在另一个StackOverflow线程中遇到过这个问题:

使用window属性将变量设置为全局命名空间会产生奇迹。

window.getAlert = getAlert;

然后我能够在我的代码中的任何位置访问该变量。我仍然不完全理解为什么,但它现在有效。

我感谢所有有用的回复,这些回应引导我做出最终答案。我仍然试图从头开始编写javascript。我可以操纵它并阅读它,但是从头开始编写通常会因为差的范围等而导致错误。再次感谢