扫码关注官方订阅号
如下,为什么可以在函数f定义之前就调用呢?编译器是如何处理的呢?
f(); function f(){ alert("hehe"); }
看到楼上拿javascript和c语言进行类比,还说只有c需要预先定义,我就笑了,看来其对此一无所知。看来我必须普普法了上过大学学过c语言的,一定有印象当初一个概念性的东西如下:
目前的编程语言分为编译型语言和解释行语言。
编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。而编译后需要进行连接,结果没有前置声明,连接器无法知道对应符号的位置,因此无法将多个文件链接到一起。所以此类语言在使用对应的变量之前必须要进行对应的声明。
解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。目前的脚本语言基本都是解释型语言,他们一般都有相应的脚本引擎来解释执行,他们一般需要解释器才能运行。由此,javascript和php等脚本语言理论上是根本不需要手动声明的,因为解释器会在执行前把整个脚本加载到内存中,抓取其中的声明部分,然后进行处理对应的函数流程,然后再从头开始执行。这一过程称为解释。解释器帮你做了许许多多的事情,比如申请内存,释放内存,垃圾回收,线程同步,区域通信,变量管理等,区区声明,自然不在话下。
javascript
php
以上。
页面加载过程中,浏览器会对页面上或载入的每个js代码块(或文件)进行扫描,如果遇到定义式函数,则进行预处理,处理完成之后再开始由上至下执行
根据我狭隘的编程语言知识,好像也就C语言对于定义和调用的顺序有要求了吧
声明提前啊。有一个预编译的过程。
function里面的函数定义方式原本就是先调用,后声明的,,如果是var函数的话,必须要是先声明,后调用。
//function函数 f(); function f(){ alert("hehe"); } //var函数 var f = function(){ alert("hehe") } f();
很简单:声明提前
简单地讲,就是JavaScript 会提升变量声明(Hoisting)。意味着 var 表达式和 function 声明都将会被提升到当前作用域的顶部。
更多内容就得从执行上下文,作用域来看了。
程序有个预处理机制
变量提升,function提升。function f(){
alert("hehe");
}f();
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
看到楼上拿javascript和c语言进行类比,还说只有c需要预先定义,我就笑了,看来其对此一无所知。看来我必须普普法了
上过大学学过c语言的,一定有印象当初一个概念性的东西如下:
编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。
而编译后需要进行连接,结果没有前置声明,连接器无法知道对应符号的位置,因此无法将多个文件链接到一起。所以此类语言在使用对应的变量之前必须要进行对应的声明。
解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。目前的脚本语言基本都是解释型语言,他们一般都有相应的脚本引擎来解释执行,他们一般需要解释器才能运行。
由此,
javascript和php等脚本语言理论上是根本不需要手动声明的,因为解释器会在执行前把整个脚本加载到内存中,抓取其中的声明部分,然后进行处理对应的函数流程,然后再从头开始执行。这一过程称为解释。解释器帮你做了许许多多的事情,比如申请内存,释放内存,垃圾回收,线程同步,区域通信,变量管理等,区区声明,自然不在话下。以上。
页面加载过程中,浏览器会对页面上或载入的每个js代码块(或文件)进行扫描,如果遇到定义式函数,则进行预处理,处理完成之后再开始由上至下执行
根据我狭隘的编程语言知识,好像也就C语言对于定义和调用的顺序有要求了吧
声明提前啊。有一个预编译的过程。
function里面的函数定义方式原本就是先调用,后声明的,,如果是var函数的话,必须要是先声明,后调用。
很简单:声明提前
简单地讲,就是JavaScript 会提升变量声明(Hoisting)。意味着 var 表达式和 function 声明都将会被提升到当前作用域的顶部。
更多内容就得从执行上下文,作用域来看了。
程序有个预处理机制
变量提升,function提升。
function f(){
}
f();