2015-10-15 46 views
3

为什么第一个JavaScript代码段的工作,而不是第二个?:为什么我不能在html页面的另一部分调用js函数?

<script> 
    commenta(); 
    function commenta(){ 
    alert('test'); 
    } 
</script> 
<script> 
    commenta(); 
</script> 

<script> 
    function commenta(){ 
    alert('test'); 
    } 
</script> 
+4

它被称为[提升](https://developer.mozilla.org/ru/docs/Glossary/Hoisting) –

回答

3

正如评论所述,它的工作原因是因为。 Javascript引擎会将所有声明移到函数/全局定义的顶部。

但第二个例子是抛出一个错误,因为吊起不会跨<script>标签工作。

尝试交换脚本标记的顺序,它应该工作。

fiddle: Your code (Before swap)

fiddle: After swap

0

commenta(); function commenta() { alert('test'); }

在这个例子中,浏览器会将所有函数声明的脚本块的顶部和然后执行呼叫。

在另一个例子中,浏览器还不知道如何执行commenta,因为它还没有解析那部分DOM。

0

您在函数注册之前调用该函数,因为2个标签分别在不同的标签下注册,其中声明在一个脚本标签下包含在一起时,它们是整个寄存器。最好的做法是在声明后调用一个函数。

相关问题