这是我参加前端训练营笔记活动的第7天。
深入理解JavaScript
JavaScript的基本概念
诞生:1995年,Brendan Eich开发
1、借鉴C语言的基本语法
2、借鉴Java语言的数据类型和内存管理
3、借鉴Scheme语言,将函数提升到“第一等公民”(first class)的地位
4、借鉴Self语言,使用基于原型(prototype)的继承机制
JavaScript进程分为Browser进程、GPU进程、渲染进程、插件进程、网络进程等,其中渲染进程又包括了GUI线程、JS线程、事件触发线程、定时器触发线程、网络线程等。
作用域
变量的可访问性和可见性
静态作用域,通过它就能够预测代码在执行过程中如何查找标识符。
全局作用域
var company = "Bytedance";
function showCompany(){
console.log(company);
}
showCompany()
函数作用域
var company = "Bytedance";
function showCompany(){
company = "douyin";
console.log(company);
}
showCompany()
块级作用域
{
const company = "Bytedance";
console.log(1,company);
}
console.log(2,company);
变量提升
1、var有变量提升
2、let、const没有变量提升,提前访问会报错
3、function函数可以先调用再定义
4、赋值给变量的函数无法提前调用
JavaScript是怎么执行的
源代码经语法分析后执行上下文、经词法分析后进入AST阶段,之后字节码逐行解释执行为机器码或优化编译执行为机器码。
当JS引擎解析到可执行代码片段(通常是函数调用)的时候,就会先做一些执行前的准备工作,这个准备工作就叫做“执行上下文”(execution context简称EC),也叫执行环境。
全局执行上下文在代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份。
函数执行上下文在当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈顶弹出。