“如何调试”;“未定义函数”;javascript中的错误

“如何调试”;“未定义函数”;javascript中的错误,javascript,Javascript,我是javascript的新手。我正在使用firebug调试我的程序,我得到了一个“函数未定义”错误。我在网上搜索过,人们说这是因为函数中的语法错误。但是这个函数非常大,我现在不能使用firebug(因为它只会给我“未定义”的错误),有什么好的方法来调试它吗?有什么工具可以用吗?谢谢 这可能是由于定义函数的脚本中的语法错误导致脚本未执行且函数未被定义,但我发现通常当您输入错误时会发生此错误。 例如: function doSomething() { } dosomething(); 在那里,我

我是javascript的新手。我正在使用firebug调试我的程序,我得到了一个“函数未定义”错误。我在网上搜索过,人们说这是因为函数中的语法错误。但是这个函数非常大,我现在不能使用firebug(因为它只会给我“未定义”的错误),有什么好的方法来调试它吗?有什么工具可以用吗?谢谢

这可能是由于定义函数的脚本中的语法错误导致脚本未执行且函数未被定义,但我发现通常当您输入错误时会发生此错误。
例如:

function doSomething() {
}
dosomething();
在那里,我忘了大写
s
。因为JavaScript区分大小写,所以找不到该函数


要调试它,您可以做的事情是找到您实际调用的函数,然后将其与定义的函数列表进行比较。如果我们只处理全局函数,那么您可以将其粘贴到JavaScript控制台中(必要时删除换行符),以查看您定义的所有全局函数:

for(var key in window) {
    if(Object.prototype.hasOwnProperty.call(window, key)) {
        if(typeof window[key] === 'function' &&
           window[key].toString() !== '[object Function]' &&
           window[key].toString().indexOf('[native code]') === -1) {
            console.log(key);
        }
    }
}

(在某些情况下(例如,
[native code]
出现在非本机函数中),这无法列出一些,但它们不太可能出现。)

您可以发布函数声明。可能是您使用的是
函数表达式

函数表达式

var f = function({alert(1);});
函数语句

function foo() {alert(2);}
对于
函数表达式
,在执行该行代码之前,函数不存在

使用
函数语句
该函数在编译时存在


当然,这也可能是一个范围问题,但没有代码我们无法看到。

嗨,icktoofay,谢谢你的回复。但是我仔细检查了我的代码,我很确定函数名是正确的。我猜这个错误是因为函数中有一些代码。但是,由于调试器现在没有用处(它只说“函数未定义”),有什么简单的方法来调试它吗?@Fey:首先,您需要找到错误所在。我不知道Firebug是否会告诉你(看看Firebug会如何向你展示),但如果不是,你可以尝试在你认为发生的地方插入
console.log
调用。当错误发生时,之后的调用将不会运行,因此这是一种粗略的方法来判断错误在哪里。@Fey:一旦知道错误在哪里,您可以尝试添加
调试器语句,就在错误发生的位置之前。然后,您可以进入Firebug中的脚本选项卡,它应该在那里中断,让您在该点上检查环境。