深入理解JS
诞生时间:1995年,Brendan Eich开发
发展:
- Mocah -> 1995.9 LiveScript -> 1995.12 JavaScript
- 1997.6 第一版ECMAScript发布
- 2009年 Ryan创建了Node.js
js基本概念:
- Browser进程
- GPU进程
- 渲染进程
- 插件进程、网络进程...
js特性:
- 单线程
- 动态、弱类型
- 运行时才能确定,使用前无需声明
- 面向对象、函数式
- 解释类语言、JIT
- 安全、性能差
js数据类型
字符串、undefined、数字、null、布尔、symbol、bingInt 7种
js基本概念-变量提升
- var有变量提升
- let、const没有变量提升,提前访问会报错
- function函数可以先调用,再定义
- 赋值给变量的函数无法提前调用
js进阶知识点
js是怎么执行的
当js引擎解析到可执行片段时,就会先做一下执行前的准备工作,这个准备工作就叫做“执行上下文”,也就是执行环境。
- 全局执行上下文:代码开始执行时就会创建,压入
执行栈的栈底中,每个生命周期内只有一份 - 函数执行上下文:当函数被执行时,函数内代码会编译,生成环境变量、词法环境等,当函数执行结束时该执行环境从
栈顶弹出。
js进阶知识点-闭包
function showName(){
const dep = "边缘云";
const name "zq";
return function (){
//形成闭包
console.log(dep);
return name
}
const getName = showName();
console.log(getName());
//结果:边缘云 zq
结果还保留在环境中
this:
- 普通函数的this指向window
- 对象调用指向对象
- 过程
- 创建临时对象
- 将this指向临时对象
- 执行构造函数
- 返回临时对象
js垃圾回收机制:
- 标记垃圾
- 对象复制
- 区域反转
!!事件循环:
func -> 微任务 -> 宏任务
console.Log('1');
setTimeout()=>{
console.log('setTimeout')
//微任务
new Promise((resolve)=>{
console,log('2');
resolve()
}).then(() => {
console.log('aa')
)
console,log('3');
输出结果:
1
2
3
aa
setTimeout
特别注意:
基础数据类型 放在`栈上`
复杂数据类型 放在`堆上`