jquery – $(document).ready()里面的范围?

所以为了保持井井有条,我有几个javascript文件,即使它们都(最终)被缩小在一起形成一个最终的javascript文件。

每个文件的内容都包含在:

$(document).ready(function(){ //some javascript here }); 

好像我把东西放在单独的文件中(在那些代码之间),它们彼此无法访问。 这是范围问题吗? 我能做什么?

例如,在一个文件中,我有一堆代码来根据通过ajax接收的数据创建表。 但是,该文件的一半只是模板,用于显示数据,具体取决于它的类型等。 我想将模板放在自己的文件中。

我知道这只是一个“偏好”问题,我可以把它全部放在一个文件中。

但我希望从中学习,甚至可以让它成为’我’的方式。

Javascript使用function范围,因此函数内的局部变量对外部不可见。 这就是您的代码无法访问其他范围的代码的原因。

理想的解决方案是创建一个命名空间

 var NS = {}; (function(){ function privateFunction() { ... } NS.publicFunction = function(){ ... } })(); $(document).ready(function(){ NS.publicFunction(); }); 

这也是一种有用的模式,因为它允许您区分私有和公共元素。

这是一个范围问题。 例如:

 function a() { var myHiddenStr = 'abc'; } alert(typeof(myHiddenStr)); 

您无法在函数a之外访问myHiddenStr 。 以类似的方式,您用于文档准备的匿名函数会隐藏其中的所有内容。

拥有一个全局范围来放置来自不同js文件的东西不是一个好主意。 拥有一个document.ready处理程序并从中调用各自的函数可能更好。 然后,您可以从函数中获取结果,并将它们传递给需要使用这些函数的其他函数。