深入理解JavaScript|青训营笔记

53 阅读2分钟

基本概念

数据类型

  • 对象
    • 数组
    • 函数
  • 基础类型
    • 字符串
    • undefined
    • 数字
    • null
    • 布尔
    • symbol
    • bigInt

注意:

  • js中复杂数据类型复制的是地址,初始值可以改变
  • 而基础数据类型复制的是值,初始值不可以被改变
const arr = [1,2];
arr.push(3);
const str = 'strstrstr';
str.slice(0,2);
console.log(arr,str);
// arr = [1,2,3];
// srt = 'strstrstr';

作用域

静态作用域:通过它就能预测代码在执行过程中如何查找标识符。

  • 全局作用域
  • 函数作用域
  • 块级作用域

image.png

变量提升

  • var有变量提升
  • let,const没有变量提升,提前访问会报错(let可改变,const不可改变)
  • function函数可以先调用再定义
  • 赋值给变量的函数无法提前调用
console.log('company',company);
// company 报错
console.log('dep',dep);
// dep 报错
console.log('myname',myname);
// myname 
showInfo();
// Bytedance 边缘云 zhangjing
show();
// 报错

const company = "Bytedance";
let dep = "边缘云";
var myname = "zhangjing"

function showInfo(){
    console.log(company , dep , myname);
    console.log(myname);
}
var show = function(){
    console.log(myname);
}

JS是怎么执行的

image.png

执行上下文

当JS引擎解析到可执行代码片段(通常是函数调用)的时候,就会先做一些执行前的准备工作,这个准备工作,就叫做执行上下文 execution context,简称EC,也叫执行环境。

image.png

  • 全局执行上下文:代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份
  • 函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境,词法环境等,当函数执行结束的时候,该执行环境从栈顶弹出。

image.png

  • 创建执行上下文的时候做了什么?

    • 绑定This
    • 创建词法环境
    • 创建变量环境
  • 词法环境:用来存储函数,let,const定义的变量绑定。

  • 变量环境:用来存储var变量绑定。

  • Outer:指向外部变量环境的一个指针。

JS的进阶知识点

闭包

image.png

This

image.png

垃圾回收

image.png

总结

  1. JS是单线程的,但是Rander进程里面可以有多个线程。
  2. JS线程和GUI线程互斥,执行大的计算任务会导致页面卡顿。
  3. 基础数据类型存在栈上,复杂数据类型存在堆上。
  4. const,let没有变量提升,提前使用会报错。
  5. JS也有编译过程,执行前会生成执行上下文。
  6. 一个执行上下文包括变量环境,词法环境,This。
  7. 变量环境里面有一个指向外部函数的执行上下文的指针,形成了作用域链。
  8. This和执行上下文绑定。