1

假设我有一个链接到两个脚本的 HTML:

...
<script type="text/javascript" src="general.js"></script>
<script type="text/javascript" src="specific.js"></script>
...

这两个脚本中的每一个都定义了自己的 jQuery .ready()

一般.js:

jQuery(function() {
  var foo;
  $('#btn').click(function() {alert(foo())});
}

具体的.js:

jQuery(function() {
  foo = function() {alert("hello")};
  $('#btn').click(function() {foo()});
}

哪里#btn是一个按钮元素。

当我点击时,#btn我期待看到“hello”对话框,但相反,我进入Uncaught TypeError: undefined is not a function了 chrome 开发人员工具。

我自己的理解是,在事件foo访问它之前应该已经分配了函数,而不是未定义。click显然,我的理解是不正确的。有人可以向我解释为什么它的行为方式是这样吗?

4

1 回答 1

4

您在第一个函数中声明“foo var 。因此,它是该函数的本地函数,并且在其外部不可见。

您可以通过在第一个“就绪”处理程序之外声明它来使“foo”全局化。

全局变量有点不受欢迎;将值保留为元素本身的“数据”值可能会更好。

$(function() {
   $('#btn').data('foo', 'some value');
   $('#btn').click(function() {alert($(this).data('foo'))});
}

这样,数据与元素相关联(尽管不是直接在 DOM 对象上;jQuery 会跟踪内部映射中的值以避免与 DOM 相关的内存泄漏),并且不会污染全局命名空间。

于 2012-09-28T00:04:13.373 回答