Javascript 功能顺序什么时候重要?
我知道JS在执行代码之前会对函数进行预编译。所以函数顺序并不重要。但是,在链接*.js文件时,函数顺序不知何故成了一个问题 比如说,Javascript 功能顺序什么时候重要?,javascript,jquery,Javascript,Jquery,我知道JS在执行代码之前会对函数进行预编译。所以函数顺序并不重要。但是,在链接*.js文件时,函数顺序不知何故成了一个问题 比如说, <script src="@Url.Content("~/Scripts/Personal/MyJScript.js")" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () {
<script src="@Url.Content("~/Scripts/Personal/MyJScript.js")" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
hello();
afterCall();
hello2(); //fails, defined in MyJScript2.js
});
function afterCall() {
alert('inline function defined after call');
}
</script>
<script src="@Url.Content("~/Scripts/Personal/MyJScript2.js")" type="text/javascript"></script>
正文中的脚本标记可能会在外部JS文件的附加请求完成之前执行(或尝试执行)
与其说是函数声明顺序的问题,不如说是加载顺序和时间的问题。我认为问题不在于顺序,而在于$(document).ready是在返回js内容之前执行的,因此函数在被调用时还没有加载 documentready的目的是保证DOM已经准备好,而不是保证所有的http调用都已完成,而且我相当确定通常的脚本阻塞在这种情况下不适用 值得一提的是,我重新创建了您的测试并成功运行了它,证明顺序无关紧要,这是一个计时/加载问题:
但我没有找到一个令人满意的解决方案:(您可以使用来获取脚本并在成功回调中执行一些功能,而不是使用脚本标记来导入MyJScript 2。这些
标记在整个HTML中的何处?在
中?似乎每个*.js文件在下一个开始处理之前都已被完全处理>标记在正文中,$(文档)。ready
在加载MyJScript 2.js之前执行。它是否正确地加载到myScript.js文件中?我在加载lol之前就这样做了,我觉得这应该可以按预期工作。即使$(文档).ready
是在加载第二个脚本之前执行的,在知道整个初始DOM之前不应执行回调(即,解析器到达一个关闭的
标记或eof)。我认为问题一定出在MyJScript 2.js文件中。
<body>
<script src="/Scripts/Personal/MyJScript.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
hello();
afterCall();
hello2(); //fails
});
function afterCall() {
alert('inline function defined after call');
}
</script>
<script src="/Scripts/Personal/MyJScript2.js" type="text/javascript"></script>
</body>