JavaScript预编译
前言:在JavaScript中存在一种预编译的机制,这也是Java等一些语言中没有的特性,也就正是因为这个预编译的机制,导致了js中变量提升的一些问题,下面这两句话能解决开发当中一部份问题,但不能解决所有问题,还有一些问题是你必须通过学习预编译才能解决的。
- 函数声明整体提升(函数定义会提升,传参也会提升。)
- 变量声明提升(*注意预编译时,变量声明会提升,但变量赋值不会提升。)
预编译分为全局预编译和局部预编译,全局预编译发生在页面加载完成时执行,而局部预编译发生在函数执行的前一刻。
预编译阶段发生变量声明和函数声明,没有初始化行为(赋值),匿名函数不参与预编译 。只有在解释执行阶段才会进行变量初始化 。
tip:JS函数的调用永远都是在函数声明下面调用,即使你的调用是写在函数声明之前的,它隐式也是在函数声明下调用的。
局部预编译的4个步骤:
创建AO对象(Activation Object)执行期上下文。
找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
将实参值和形参统一。
在函数体里面找函数声明,值赋予函数体。
全局预编译的3个步骤:
创建GO对象(Global Object)全局对象。
找变量声明,将变量名作为GO属性名,值为undefined
查找函数声明,作为GO属性,值赋予函数体
原文章:
https://zhuanlan.zhihu.com/p/50236805
JavaScript预编译相关推荐
- JavaScript预编译过程
JavaScript预编译过程 阶段(三个) 预编译过程 1. JavaScript代码执行之前的预编译 案例说明 2. 函数执行前的预编译 案例说明 总结 预编译两个小规则: 预编译前奏 阶段(三个 ...
- 5单个编译总会编译全部_5分钟读懂JavaScript预编译
大家都知道JavaScript是解释型语言,既然是解释型语言,就是编译一行,执行一行,那又何来预编译一说呢?脚本执行js引擎都做了什么呢?今天我们就来看看吧. 1-JavaScript运行三部曲 语法 ...
- JavaScript作用域原理——预编译
JavaScript是一种脚本语言, 它的执行过程, 是一种翻译执行的过程.并且JavaScript是有预编译过程的,在执行每一段脚本代码之前, 都会首先处理var关键字和function定义式(函数 ...
- Javascript作用域原理---预编译
问题的提出 首先看一个例子: var name = 'laruence'; function echo() { alert(name); var name = 'eve'; alert(name); ...
- JavaScript的预编译及执行顺序
从JavaScript引擎的解析机制来探索JavaScript的工作原理,下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序. 如果说,JavaScript引擎的工作机制比较深奥是 ...
- javascript运行过程中的“预编译阶段”和“执行阶段”
javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段 而在javascript中也有类似的"预编译阶段"(javascrip ...
- javascript代码块概念及预编译机制
JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解javaScript语言的运行机制,或者简单地 ...
- javascript之预编译
首先要记住:预编译发生在函数执行的前一刻 先来一个小知识: 函数声明整体提升 test(); function test(){...//省略n行代码 } 在预编译阶段,会把函数声明提升到代码顶部: f ...
- JavaScript中函数作用域之精辟,函数原理的浅入深出,及程序执行预编译之通天编译???
1.程序执行的前一刻会先将代码预编译一遍,如果有语法错误则直接终止程序运行 //预编译之通天编译 --> 在执行的前一刻,会把文件通天扫描一遍 /** //预编译 函数整体提升(即函数会放到程序 ...
最新文章
- Deep Learning回顾之LeNet、AlexNet、GoogLeNet、VGG、ResNet
- Jupyter不要自动启动浏览器(Firefox)
- windows环境下安装scrapy框架报错问题--最快捷有效的解决方案
- cad2014卡顿的解决方法_升级iOS14.1后出现卡顿、闪退?这3种方法可以解决
- [BZOJ4027][HEOI2015]兔子与樱花(贪心)
- Python - 调试Python代码的方法
- java udp ip端口 设置_UDP端口扫描Java只找到1个开放的UDP端口
- 首批国家应用数学中心名单公布,哪些高校获批?
- 动软代码生成器连接Oracle 11g
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别(小问题大思想)
- 大数据分析可以用哪些营销策略
- 招聘 | 刘知远老师博士生涂存超博士创办的「幂律智能」招NLP算法工程师啦
- android stadio 编译报错:download fastutil-7.2.0.jar
- Unity: 打飞碟Adapter版
- 单片机通过串口与电脑通信
- vs2010无法找到程序,安装Microsoft Visual Studio 2010 Service Pack 1 ,系统无法找到指定的对象
- 【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员
- python循环案例:模拟银行ATM存款取款
- 用requests的get检验电视直播源是否有效的方法
- Python之Datasets库安装报错的解决方法
热门文章
- 使用Python和plotly制作列线图
- MapInfo数据格式
- 分布式锁redisson的使用 看门狗原理
- 业务知识 - 人群圈层汇总
- linux中的绝对路径 lt gt,Linux中目录以及路径问题
- mathimatica 和matlab,Mathematica和Matlab功能对比
- Android之GridView+BaseAdapter
- 致力协同办公oa系统服务器设置,致力协同办公OA系统——安装手册.pdf
- oa系统对服务器的要求1000台,OA办公系统协同办公平台运行服务器最低配置要求...
- 苹果vs剪辑下载_Mac上有哪些好用的视频剪辑软件