基本概念
数据类型
- 对象
- 数组
- 函数
- 基础类型
- 字符串
- 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';
作用域
静态作用域:通过它就能预测代码在执行过程中如何查找标识符。
- 全局作用域
- 函数作用域
- 块级作用域
变量提升
- 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是怎么执行的
执行上下文
当JS引擎解析到可执行代码片段(通常是函数调用)的时候,就会先做一些执行前的准备工作,这个准备工作,就叫做执行上下文 execution context,简称EC,也叫执行环境。
- 全局执行上下文:代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份。
- 函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境,词法环境等,当函数执行结束的时候,该执行环境从栈顶弹出。
-
创建执行上下文的时候做了什么?
- 绑定This
- 创建词法环境
- 创建变量环境
-
词法环境:用来存储函数,let,const定义的变量绑定。
-
变量环境:用来存储var变量绑定。
-
Outer:指向外部变量环境的一个指针。
JS的进阶知识点
闭包
This
垃圾回收
总结
- JS是单线程的,但是Rander进程里面可以有多个线程。
- JS线程和GUI线程互斥,执行大的计算任务会导致页面卡顿。
- 基础数据类型存在栈上,复杂数据类型存在堆上。
- const,let没有变量提升,提前使用会报错。
- JS也有编译过程,执行前会生成执行上下文。
- 一个执行上下文包括变量环境,词法环境,This。
- 变量环境里面有一个指向外部函数的执行上下文的指针,形成了作用域链。
- This和执行上下文绑定。