// js 是怎么被浏览器解析的?
// js 是被运行平台:浏览器 和 node
/**
* 1:全局检索。查看是否有语法错误--->语言分析
* 2:创建全局对象GO(global)--->预编译
* 3:执行每行代码 对变量进行赋值 等操作 --->解析执行 ---> 变量一旦创建;不能删除,除非关闭程序
* ---> window对象在打开页面时候创建;先创建window在语言分析
* **/
// 预编译的过程:作用域与对象关系,对象中内容具体变化的过程
/**
* 全局作用域下预编译的过程
* 1:当语言分析执行完毕时,
* 第一步:创建一个go的空对象 --->go{}
* 第二步:将全局下所有var声明的变量提升到作用域的最顶端,同时给GO对象添加属性(属性为var声明的变量) 值为undefined
* ---->go{a:un,b:un,} 没c d
* 注意:let 与 const 都不能提升
* 第三步:函数定义提升,会将定义的函数提升到当前作用域的最顶端 ----->go{a:un,b:un,f:function f(){}}
* 注意:1:变量与函数的提升没有最顶端;只有提升的先后顺序,变量先提升;函数后提升
* 2:变量提升,声明提升赋值不提升,赋值为undefined
* 3:函数提升,函数名为属性,值为函数在堆中的指针。
* 4:当变量名字和函数名字重复时候,访问该名字;值为函数;--->理由是:因为变量先提升值为undefined,函数名后提升;将udnefined 变为函数
*
* 解析执行
* 1:对所有声明的变量以及函数;进行使用值;重新赋值等操作
* 2:在执行中如果有变量 = 赋值 或直接将该变量添加到GO中;并直接赋值,没有udnefined 过程
*
* **/
console.log(b) // undefined
// console.log(c) //报错
// console.log(d) // 报错
var a;
a = 10;
var b = 0;
// let const 不能提升
let c = 0;
const d = 0;
function f(){
var a = 0;
}
JavaScript是怎么解析的
最新推荐文章于 2021-01-16 16:13:54 发布