深入理解JS|青训营笔记

84 阅读4分钟

一、JS的基本概念:

是单线程,动态、弱类型 面向对象、函数式 解释类语言、JIT 安全、性能差 函数作为 JavaScript 世界 的 一等公民

1.数据类型:

(1)基础类型: 数字(Number): 表示数值,可以是整数或小数。

字符串(String): 由零个或多个字符组成的文本字符串。

布尔值(Boolean): 只有两个值,true 和 false。

undefined: 表示未定义或不存在的值,通常在声明变量但没有对其进行初始化的情况下出现。

null: 表示空或者不存在的对象,通常用于手动释放对象或重置对象引用。

符号(Symbol): 表示独特的生成标识符,在对象属性中作为键值存在

(2)对象:可以包括函数,数组和自定义对象,通常指某种具体的实体

2.作用域

作用域指得是变量的可访问性和可见性 作用域分为全局作用域,局部作用域。而局部作用域可以分为函数作用域和块级作用域。在函数内部声明的变量只有在该函数及其子函数内部才能访问,而在代码块内声明的变量只能在该块内部访问。

(1)全局作用域

var company = "zj" function showcompany(){ console.log(company) } showcompany()

(2)函数作用域

var company = "zj" function showcompany(){ company = "douyin"; console.log(company) } showcompany()

(3)块级作用域

{ const company = "zj" console.log(1,company) }

console.log(2,company)

3.变量提升

(1)概念

变量提升是指允许变量在声明之前进行使用

(2)注意

function函数可以先调用再定义,但赋值给变量的函数无法提前调用

var:变量,会跳出块级作用域

let:变量,不会跳出块级作用域

const:常量,不会跳出块级作用域

(3)var关键字修饰的变量有变量提升,而let和const关键字修饰的变量没有变量提升,提前访问会报错

二.JS执行过程:

解析:浏览器在加载JavaScript代码时,会先对代码进行解析。解析器会将JavaScript代码转换为计算机可以理解的形式,即抽象语法树(AST)

编译:解析完成后,会进行编译。编译器会将AST转换为字节码或机器码。

执行:JavaScript代码的执行是按顺序逐行执行的。在执行过程中,如果遇到函数调用或变量声明等操作,会进入相应的执行上下文。

执行上下文:执行上下文是JavaScript中非常重要的概念。每当函数被调用时,都会创建一个执行上下文。执行上下文包括变量对象、作用域链和this指向。 执行上下文分为三种类型:全局执行上下文、函数执行上下文和eval执行上下文。

变量提升:在执行上下文被创建时,JavaScript会将变量声明提升到作用域的顶部。这意味着可以在变量声明之前使用变量。

作用域链:JavaScript中的作用域链是由当前执行上下文和所有外层执行上下文的变量对象组成的。当查找变量时,会先在当前执行上下文的变量对象中查找,如果没有找到,就会向上级执行上下文的变量对象中查找,直到找到为止。

this指向:this指向在JavaScript中比较复杂,它的值取决于函数的调用方式。this指向在函数执行时动态绑定。

垃圾回收:JavaScript是一种垃圾回收语言,这意味着开发者不需要手动管理内存。JavaScript会自动检测不再使用的对象并回收它们的内存。

三.JS进阶知识点

1.闭包:闭包让你可以在一个内层函数中访问到其外层函数的作用域

(1)函数嵌套函数

(2)内层函数可以访问外层函数的变量和参数

作用: 防止变量和参数被垃圾回收机制回收(变量持久化)

防止变量和参数被外部污染(变量只在闭包内部可访问)

2.this

this 是 JavaScript 中一个非常重要的关键字,它指向当前执行上下文中的对象。它可以用在函数、方法和构造函数中,并且其值的解析方式与其所在的执行上下文有关。

(1)函数作为普通函数调用,this指向全局对象(在浏览器环境下,全局对象是window)

(2)函数作为对象方法调用,this指向该对象

(3)作为构造函数调用,this指向新创建的示例对象

3.垃圾回收

javaScript 中的垃圾回收机制是自动进行的,它会自动管理不再使用的内存空间,以确保它们可以被重复利用。垃圾回收器负责标记和清除不再使用的内存空间,以便该内存可以被重新分配。