大家都知道js是顺序执行的,但是如果在一个函数的定义之前调用这个函数那会是什么效果那?
下面的代码是一个列子,如果myAbc没有定义则会提示错误,如果已经定义则会正确提示。
<script>
try {
myAbc();
} catch(e) {
alert("error");
}
</script>
<script>
function myAbc() {
alert("myAbc");
}
</script>
在这种情况下会报错。
<script>
try {
myAbc();
} catch(e) {
alert("error");
}
function myAbc() {
alert("another myAbc()");
}
</script>
这种情况是可以执行的,这说明在一个script范围内定义函数会预加载,这样在调用函数的时候函数就已经存在了。
<script>
try {
myAbc();
} catch(e) {
alert("error");
}
function myAbc() {
alert("another myAbc()");
}
</script>
<script>
function myAbc() {
alert("myAbc");
}
</script>
这种情况下会提示什么那?
呵呵,another myAbc(),跟你想的不一样吧。
总结一下,就是各个script代码模块都是顺序执行的,每个模块的代码只能执行前面已经定义的函数和自己所在代码模块的函数,而不能调用在其后面的模块的函数。
本文通过几个示例探讨了JavaScript中函数预加载的机制。在同一个script标签内,即使先调用函数再定义该函数也不会报错,这是因为JavaScript引擎会进行函数预加载。但如果尝试在不同的script标签间调用未定义的函数,则会引发错误。
2048

被折叠的 条评论
为什么被折叠?



