深入理解JS | 青训营笔记

107 阅读2分钟

深入理解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

特别注意:

基础数据类型 放在`栈上`
复杂数据类型 放在`堆上`