函数声明为什么可以在声明前被调用

函数声明方式

  • 函数表达式声明

const nomalFunc1=function(){}

  • 函数声明式声明

function nomalFunc2(){}

声明前调用

nomalFunc1()//error了
const nomalFunc1=function(){
    console.log('表达式声明')
}
复制代码

image.png

console.log(nomalFunc2)
function nomalFunc2(){
  console.log('函数声明')
}
复制代码

image.png

哦~,啊这?为什么呢??

JavaScript

JavaScript源代码由Web服务器发送到客户端浏览器之前不需经过编译,而是将文本格式的字符代码发送给客户端浏览器解释执行。它是解释器语言

编译型语言和解释行语言

回顾下大学时候的知识(考c语言的时候 考过)

编程语言分为编译型语言和解释行语言

编译型语言

  • 在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了
  • 而编译后需要进行连接,结果没有前置声明,连接器无法知道对应符号的位置,因此无法将多个文件链接到一起。所以此类语言在使用对应的变量之前必须要进行对应的声明。

解释型语言

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

小结

  • JavaScript是解释器语言,理论上js是不需要手动声明的,因为解释器会在执行前把整个脚本加载到内存中,抓取其中的声明部分,然后进行处理对应的函数流程,然后再从头开始执行。这一过程称为解释。解释器帮你做了许许多多的事情,比如申请内存,释放内存,垃圾回收,线程同步,区域通信,变量管理等
  • 换句话说:没有另外 关键字 const let var 表达式声明的话 ,函数都是根据 js执行的顺序 先调用,后声明(又要扯到调用栈和执行上下文了其实,留个坑,回头补上执行上下文的总结
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享