Javascript 多个jQuery.ready()-附加到现有事件处理程序,而不是创建另一个事件处理程序

Javascript 多个jQuery.ready()-附加到现有事件处理程序,而不是创建另一个事件处理程序,javascript,jquery,Javascript,Jquery,假设我有一个链接到两个脚本的HTML: ... <script type="text/javascript" src="general.js"></script> <script type="text/javascript" src="[pagename]_specific.js"></script> ... home\u specific.js:一个“[pagename]\u specific.js”的示例 其中,#btn是一个按钮元素 “ge

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

...
<script type="text/javascript" src="general.js"></script>
<script type="text/javascript" src="[pagename]_specific.js"></script>
...
home\u specific.js:一个“[pagename]\u specific.js”的示例

其中,
#btn
是一个按钮元素

“general.js”是一个由多个页面共享的脚本,而每个页面都有其专用的“[pagename]\u specific.js”,用于定义分配给
foo
的函数的行为方式

当我点击
#btn
时,我本想看到“hello”对话框,但结果却是
未捕获的TypeError:undefined不是chrome开发者工具中的函数。从中,我了解到这是因为这两个
.ready()
有两个独立的事件处理程序


问题:有没有办法让“[pagename]\u specific.js”中的
.ready()
附加到“general.js”中的
.ready()
的事件处理程序,而不是定义另一个匿名函数?

脚本中实际发生的事情与您所想的不同

在以下方面:

jQuery(function() {
  var foo;
  $('#btn').click(function() {alert(foo())});
}
jQuery(function() {
  foo = function() {alert("hello")};
}
通过在foo前面键入var,您已经创建了foo的本地副本。 在这种情况下,foo是未定义的

在以下方面:

jQuery(function() {
  var foo;
  $('#btn').click(function() {alert(foo())});
}
jQuery(function() {
  foo = function() {alert("hello")};
}
实际上,您已经创建了名为foo的全局可访问函数。但在调用之前,这不会执行。 但在第一个脚本中,您尝试调用它。但实际发生的情况是,脚本try使用了自己的本地定义变量foo,该变量未定义

下面是我要做的

// general.js:
jQuery(function() {
  $('#btn').click(function() { 
    foo(); 
  });
});

// home_specific.js
var foo = function() {
  alert("hello");
};

我希望这能有所帮助!!希望你明白发生了什么事

如果应用程序是您的,您可以始终创建一个全局名称空间
window.foo
@fabriciomatté-谢谢,但如果可能的话,我希望避免污染全局名称空间。是的,但除此之外没有太多。除了全局上下文之外,两个不同脚本的函数没有任何公共作用域。在全局上下文中,您至少需要一个
var
来存储名称空间,或者需要一个可以访问以进行操作的公共元素。您的问题与事件处理程序无关,都与变量范围有关。在一个函数内声明的变量在该函数外是不可访问的。我试图避免污染全局名称空间,但我想这是实现我需要的唯一选项。谢谢