1.语言
1.机器语言
2.汇编语言: 汇编指令
3.高级语言: C、C++ 、Java || Javascript、python
编译成可执行文件 || 解释型语言需要js引擎解析成机器语言
2.输入域名后
1.输入域名-> cdn域名解析 -> 找到最近的服务器ip地址 -> 向服务器请求静态资源 -> 浏览器下载资源 、解析资源:
a.解析html,生成dom树
b.遇到css标签,就去请求资源,解析css,生成css规则树,与dom结合生成渲染树,布局,绘制,显示
c.遇到script标签,请求资源,解析js,-> js引擎 , 最后CPU执行
浏览器内核:webkit
webCore webJavaScript(webJS)【函数调用栈】
解析html 布局渲染等(渲染层) 解析执行js(逻辑层)
内核:
geoco-firefix
trient-ie 现在是wink
wikit-google
js引擎:JavaScriptCore、V8、
3.V8是啥有啥
1.V8 内部有:
webCore[渲染引擎]
JavaScriptCore[js引擎]: js解释器parser-负责词法解析 语法解析
垃圾回收机制GC
4.V8干了啥:JS -> CPU识别
1.源码-> 解释器parser(词法解析 语法解析) -> 抽象语法树-AST树 ->
解释器parser阶段-被解析,创建GlobalObject对象
ignition解析成字节码(跨平台的语言) -> 当前cpu的汇编语言 -> 机器语言 -> 输出结果
| 优化的机器码 | ts执行效率比js高
执行js代码-V8内部的执行环境栈ECS
有function
无function:
先压入全局执行上下文Global Excution Stack === GO <- 变量提升的根源
2.为了让代码运行:
从磁盘 加载到 内存[中运行->机器语言]
内存划为: 堆结构 栈结构
5.解析执行js文件
1.解析:
创建全局对象GO: 作为VO属性
Global Object = { String: '类', Array: '类',window: GO, 自己定义的变量 }
同时,作用域已确定-变量的访问 【只会在scope-chains中传递】2.执行:
分俩种:全局执行上下文GEC
函数执行上下文FEC-此时创建对象AO,作为VO属性,同时定义scope chain+this:
3.编译阶段特殊情况:
return 后面var 变量 一样会提升
函数内直接使用为申明得变量,等同于在全局声明变量
function foo4() {
var a = b = 10 var a = 10
b = 10 // 全局的
}
foo4()
console.log(a)