如果我的javascript函数在document.ready call中已经被调用,为什么不调用它。
$(document).ready(function () {
//doesn't get called
function Test() {
//do something
}
}
///does get called
function Test() {
}
答案 0 :(得分:1)
从我的html元素中的onchange事件调用
我认为这意味着你有像
这样的东西<input onchange="Test()" />
在您的HTML中。
在这种情况下,答案是:因为scope。
内联事件处理程序在全局范围内进行评估。在您的第一个示例中,Test
未在全局范围内定义,它在您传递给$(document).ready
的函数内定义。因此,内联事件处理程序无法找到该函数。
这是一个简化的例子:
function ready() {
function Test() { }
}
ready();
Test(); // ReferenceError because Test is not defined in this scope
注意没有理由将函数定义放在$(document).ready
回调中,除非显式没有将它们放在全局范围内。
答案 1 :(得分:0)
有两个原因:
$(document).ready(function () {
//doesn't get called
function Test() {
//do something
console.log('test called');
}
Test();
}
);
你错过了最后一个外部的paren(上面的最后一行),而你没有调用你定义的函数。
答案 2 :(得分:0)
你在第一个例子中所做的就是定义这个功能。你没有调用它。如果您按如下所示进行更改,则现在定义和调用它:
$(document).ready(function () {
//does get called
(function Test() {
//do something
})();
});
(我假设最后遗漏的外括号在发布问题时是一个错字,但我会指出它以防万一...)
答案 3 :(得分:0)
你问的问题与此相同:
function start() {
function test() {
thisWontWork();
}
}
start();
如果你打电话/启动一个功能,并不意味着那里的功能也会启动。一个不应该重复的菜鸟错误。记住这一点!