为什么我不能在jQuery的document.ready()中定义函数?

如果我把它们放在document.ready()函数中,函数就会变成未定义的:

$(document).ready(function(){ function foo() { alert('Bar'); } }); foo(); // Undefined 

为什么会发生? 我相信我只是需要一些简单的理解:)

不知道为什么在ready()范围内定义函数对你来说很重要,但是你可以通过在前面声明foo来使它工作:

 <html><head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script> <script> var foo; // Here's the difference $(document).ready(function(){ foo = function () { alert('Bar'); } }); </script></head><body> <input type="button" onclick="foo()" value="Click me"> </body></html> 

显然你不能在ready()之后立即从内联脚本调用foo() ,因为ready()代码还没有运行,但是你可以稍后调用这个函数。

只要确保在ready()代码运行之前没有任何东西可以尝试调用foo() (或者使foo()的初始声明成为一个无害的函数)。

您可以但必须在ready()方法的范围内调用它们,否则在ready()方法退出时它们会丢失范围。

例如,下面的代码将工作:

 $(document).ready(function(){ function foo() { alert('Bar'); } foo(); // still in the scope of the ready method }); 

如果把它们放在不属于他们的任何范围内,它们将会是不确定的。 如果你真的想在$(document).ready(…)的范围之外使用它们,那么你需要在外部声明它们。 如:

 var foo; $(document).ready(function(){ foo = function() { alert('Bar'); } }); foo(); // works now because it is in scope 

希望这可以帮助。

你的函数是在$(document).ready()callback的范围内定义的,不能从外部 看到 。 可以在$(document).ready()范围之外定义函数,它只能从内部调用它。

 <script> $(document).ready(function(){ myfnc = function (param1, param2) { alert('Hello'); } myfnc(); }); </script> <input type="button" onclick="myfnc('arg1', 'arg2')" value="Click me"> 

另一个补充:

$(document).ready()函数内部声明函数或variables时,在$(document).ready()使用onclick()绑定时,这些函数是不可访问的。

你可以把你的声明移动到$(document).ready() ,或者你可以在$(document).ready()中使用$('#element').on('click', function() {}) )。