简单的JavaScript问题

mat*_*ewb 3 javascript jquery

我有一个2000行的jquery文件,我把文件分成了较小的文件,如果我在第一个文件中有一个函数,那个文件#2指的是,那么它就是未定义的.

每个文件都包含在jquery ready函数中,执行此操作的最佳方法是什么?

Wil*_*den 6

如果有问题的函数在ready处理程序的范围内声明,则任何其他代码(包括其他ready处理程序)都无法访问它.

您需要做的是在全局范围内定义函数:

function foo()
{
    alert('foo');
}

$(document).ready(function()
{
    foo();
});
Run Code Online (Sandbox Code Playgroud)

PS更简洁的添加ready处理程序的方法是这样的:

$(function()
{
   foo();
});
Run Code Online (Sandbox Code Playgroud)

编辑:如果您的每个分区ready处理程序的内容依赖于前面的部分,那么由于上述原因,您无法将它们拆分.更明智的做法是将大量逻辑分解为独立函数,将它们放在ready事件处理程序之外的自己的文件中,然后从处理程序中调用它们.

编辑:为了进一步说明,请考虑此处理程序:

$(function()
{
    var foo = 'foo';
    var bar = 'bar';

    alert(foo);
    alert(bar);
});
Run Code Online (Sandbox Code Playgroud)

我可能会把它分开:

$(function()
{
    var foo = 'foo';
    var bar = 'bar';
});

$(function()
{
    alert(foo);
    alert(bar);
});
Run Code Online (Sandbox Code Playgroud)

这里的问题是,foobar在第一个处理程序的定义,而当他们在第二个处理器的使用,他们已经走了超出范围.

像这样的任何连续逻辑流都需要在相同的范围内(在这种情况下,事件处理程序).