不可能都是订单问题and包装问题。用立即运行的函数包装某些内容不会影响顺序,只会影响范围。
And if titles
在另一个文件中定义,然后范围class Manager
没关系。所以,这是一个顺序问题。怎么titles
定义?
如果我要延迟运行任何代码,直到整个页面完全加载($(document.ready())),我可以确定所有 javascript 文件在任何代码实际运行之前都已完全加载。
不完全的。$(document).ready()
(注意括号——没有document.ready
function...) 延迟函数的执行,直到加载了页面的所有 HTML,这并不意味着所有 JavaScript 都已加载。好消息是:从 JavaScript 代码的角度来看,其他 JavaScript 文件是否已加载并不重要,因为它们都是按顺序运行的。 (Note:我在这里假设你没有做任何花哨的事情,比如添加额外的<script>
来自 JavaScript 代码的标签。)所以只要你有
<script src="titles.js"></script>
<script src="Manager.js"></script>
你可以放心Manager.js
只会在之后运行titles.js
has.
Warning!依靠$(document).ready()
排序 JS 代码是一个常见错误,可能会导致混乱!如果你的 HTML 看起来像这样
<script src="Manager.js"></script>
<script src="titles.js"></script>
where titles.js
创建一个名为的全局titles
and Manager.js
看起来像这样
$(document).ready ->
console.log titles
那么输出将有时 be titles
, and 有时 be undefined
。为什么?因为作为the docs http://api.jquery.com/ready/ say,
If .ready()
在 DOM 初始化后调用,传入的新处理程序将立即执行。
当第一个 JS 文件运行时,DOM 可能已经被初始化了! (实际上,如果浏览器缓存了页面的 HTML,则很可能会发生这种情况。)
所以,保持简单。只需按正确的顺序加载脚本即可。请记住,出于所有实际目的,您的脚本会由浏览器按顺序连接在一起,形成一个 JS 文件。