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

 我来答
一年孤独58aa
2017-10-17 · TA获得超过1404个赞
知道小有建树答主
回答量:592
采纳率:92%
帮助的人:432万
展开全部

这个是因为JavaScript中的"变量提升"作用导致. 很多编程语言都有类似的行为. 对于函数来说, 会被提升到作用域的顶部, 写在作用域末尾函数就好像在作用域开头的函数一样.

如果要避免这种行为, 可以定义通过变量引用的匿名函数: var fn = function(){};

foo(); // return 'foo'
bar(); // 会导致错误;
function foo(){
    return 'foo';
}
var bar = function(){
    return 'bar';
};
ZhangXin777999
2017-10-17 · TA获得超过3168个赞
知道大有可为答主
回答量:2075
采纳率:84%
帮助的人:216万
展开全部
编程语言分为编译型语言和解释型语言。
编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。
而编译后需要进行连接,结果没有前置声明,连接器无法知道对应符号的位置,因此无法将多个文件链接到一起。所以此类语言在使用对应的变量之前必须要进行对应的声明。
解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。目前的脚本语言基本都是解释型语言,他们一般都有相应的脚本引擎来解释执行,他们一般需要解释器才能运行。
由此,javascript和php等脚本语言理论上是根本不需要手动声明的,因为解释器会在执行前把整个脚本加载到内存中,抓取其中的声明部分,然后进行处理对应的函数流程,然后再从头开始执行。这一过程称为解释。解释器帮你做了许许多多的事情,比如申请内存,释放内存,垃圾回收,线程同步,区域通信,变量管理等。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式