我是靠谱客的博主 聪慧故事,最近开发中收集的这篇文章主要介绍JS的编译与执行顺序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

浅谈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的编译与执行顺序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部