什么时候功能顺序很重要
When does function order matter?
我知道JS在执行代码之前会对函数进行预编译。所以函数顺序无关紧要。但是,当链接*.js文件时,函数顺序会出现问题。
例如,<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>
在上面的代码中,函数hello2()
是在定义调用后链接的文件中定义的。呼叫失败。直觉上,我假设函数序在这种情况下有影响。
考虑我执行$(document).ready
,文档应该准备好了。那么,为什么会这样呢?
按照要求,下面是客户端HTML
<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>
我认为问题不在于订单,而在于$(document)。Ready在js内容返回之前执行,所以当函数被调用时,它还没有被加载。
文档准备是为了保证DOM准备好了,而不是所有的http调用都完成了,我很确定通常的脚本阻塞在这种情况下不适用。
对于它的价值,我重新创建了您的测试并成功运行,证明顺序无关紧要,这是一个定时/加载问题:http://havenshade.com/tmp/testalert.html
我没有找到一个快乐的解决方案:
正文中的脚本标签可能会在外部JS文件的附加请求完成之前执行(或尝试执行)。
不使用脚本标记导入MyJscript2,您可以使用getScript获取脚本并在成功回调中执行一些功能。
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- ajax请求的顺序总是不同的
- 按照选项卡索引的顺序循环一个jQuery选择
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 按顺序添加和删除类
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 滚动功能按相反顺序工作
- 表单提交时,点击顺序功能并提交
- 使用功能顺序吊装
- 功能无法按ios5 iPad的正确顺序工作
- 执行功能的顺序
- jQuery脚本的顺序正确吗?隐藏/显示功能在实时版本中不起作用,但可以作为独立Fiddle使用
- 你能有效地重置功能输入顺序吗
- 什么时候功能顺序很重要
- 如何按顺序向各种按钮添加功能