jquery: ámbito dentro de $ (documento) .ready ()?

Para mantenerme organizado, tengo varios archivos javascript, aunque todos (al final) se minifican juntos para formar un archivo javascript final.

Los contenidos de cada archivo están envueltos en:

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

Parece que si tengo cosas en archivos separados (entre ese código) no tienen acceso el uno al otro. ¿Es esto un problema de scope? ¿Que puedo hacer?

Por ejemplo, en un archivo tenía un montón de código para crear tablas a partir de datos recibidos a través de ajax. Sin embargo, la mitad del archivo era solo plantillas para mostrar los datos dependiendo de sus tipos y demás. Me gustaría tener las plantillas en su propio archivo.

Entiendo que esto es solo un problema de “preferencia” y que podría tenerlo todo en un solo archivo.

Pero espero aprender de esto y tal vez incluso ser capaz de hacerlo “a mi manera”.

Javascript utiliza ámbitos funcionales, por lo que las variables locales dentro de una función no son visibles desde el exterior. Es por eso que su código no puede acceder al código desde otros ámbitos.

La solución ideal para esto es crear un espacio de nombres .

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

Este es también un patrón útil porque le permite hacer una distinción entre elementos privados y públicos.

Es un problema de scope. Por ejemplo:

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

No puede acceder a myHiddenStr fuera de la función a . De manera similar, la función anónima que utiliza para documentos listos oculta todo lo que contiene.

Tener un scope global donde pones cosas de diferentes archivos js no es una buena idea. Probablemente sea mejor tener un controlador de document.ready y llamar a las respectivas funciones desde allí. A continuación, puede obtener los resultados de las funciones y pasarlas a otras funciones que necesitan usarlas.