概述
浅谈js是如何解析的?js变量使用?
前置知识
1、代码块
js中的代码块是指由
2、声明式函数与赋值式函数
JS中的函数定义分为两种:声明式函数与赋值式函数。声明式函数与赋值式函数的区别在于:在JS的预编译期,声明式函数将会先被提取出来,然后才按顺序执行js代码。
javascript是解释型语言,自然就是编译一行,执行一行。js运行过程分为三步:1、语法分析 2、预编译 3、解释执行。预编译期JS会对本代码块中的所有声明的变量和函数进行处理(类似与C语言的编译),但需要注意的是此时处理函数的只是声明式函数,而且变量也只是进行了声明但未进行初始化以及赋值。
一、语言分析
JS 会对全部的脚本代码进行解析,通过jS引擎检查你的代码是否存在错误,如果有格式错误就会抛出一个错误;否者语言分析完成。
二、预编译
全局创建
1、创建GO空对象
2、变量声明提升 赋值undefined
3、函数声明提升 并把函数体赋值
当有函数准备执行时:编译函数方法体 局部作用域
1、建立AO空对象
2、变量提升
2.1形参声明提升 赋值undefined
2.2实参声明提升、变量声明提升 赋值undefined
2.3实参形参相统一
3、函数声明提升 并把函数体赋值
三、方法体解析执行
当执行 a = 23,AO对象、GO对象中都没有var a,则会在GO对象中创建一个a:23;且解析执行完毕并不销毁
解析执行完毕AO对象销毁
页面关闭GO对象销毁
注意:在解析执行中 AO才开始创建
1 只有存在作用域的时候才会用预编译
2 es5之前 每个作用域都需要预编译
3对于同一作用域一定是先预编译在执行 不同作用域之间不存在编译和执行顺序的
js变量使用
1、 在自己的作用域中找var 声明的变量
2、如果没有去上一层作用域中找 直到找到全局作用域为止 如果一直都没有那么报错为XX is not defined 。中间任何一个作用域中找到了 那么使用的就是那一层的变量
最后
以上就是聪慧故事为你收集整理的JS的编译与执行顺序的全部内容,希望文章能够帮你解决JS的编译与执行顺序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复