JavaScript的函数为什么可以在定义之前调用?

本题的问题也是我遇到的问题,在网上搜索答案的时候,以下答案豁然开朗,故此摘录下来,感谢原文作者以及问题答者!

原文地址:https://segmentfault.com/q/1010000005707144

如下,为什么可以在函数f定义之前就调用呢?编译器是如何处理的呢?

f();
function f(){
    alert("hehe");
}

  

目前的编程语言分为编译型语言和解释行语言。

编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。

而编译后需要进行连接,结果没有前置声明,连接器无法知道对应符号的位置,因此无法将多个文件链接到一起。所以此类语言在使用对应的变量之前必须要进行对应的声明。

解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。目前的脚本语言基本都是解释型语言,他们一般都有相应的脚本引擎来解释执行,他们一般需要解释器才能运行。

由此,javascript和php等脚本语言理论上是根本不需要手动声明的,因为解释器会在执行前把整个脚本加载到内存中,抓取其中的声明部分,然后进行处理对应的函数流程,然后再从头开始执行。这一过程称为解释。解释器帮你做了许许多多的事情,比如申请内存,释放内存,垃圾回收,线程同步,区域通信,变量管理等,区区声明,自然不在话下。

 

function里面的函数定义方式原本就是先调用,后声明的,如果是var函数的话,必须要是先声明,后调用。

//function函数
f();
function f(){
    alert("hehe");
}

//var函数
var f = function(){
    alert("hehe")
}
f();

  

posted @ 2018-04-16 22:32  千行路  阅读(701)  评论(0编辑  收藏  举报