一尘不染

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

javascript

如果将它们放在document.ready()函数中,则函数的定义为未定义:

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

foo(); // Undefined

为什么会这样?我确定我只需要一些简单的理解即可:)


阅读 458

收藏
2020-05-01

共1个答案

一尘不染

不确定为什么在范围内定义函数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>

显然foo()ready()由于ready()代码尚未运行,您之后不能立即从内联脚本中调用,但是您可以稍后再调用该函数。

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

2020-05-01