JS基础|青训营笔记

68 阅读2分钟

JS基本概念

单线程

GUI线程与JS线程互斥,大量数据运算可能导致页面更新不及时或者卡顿。

动态、弱类型语言

声明变量无需指定变量类型。

面向对象、函数式

       函数式:只用"表达式",不用"语句",没有"副作用"。

       面向对象:原型,继承,封装。

解释类语言、JIT

JS不是纯粹解释类语言,变量提升可以体现其编译过程。

安全

执行需要附属环境(浏览器),不能访问本地文件系统等,安全性高

性能差

边编译边执行,性能较差。

JS数据类型

基本数据类型:String、Number、Boolean、Null、Undefined、Symbol(ES6)、BigInt. 赋值是赋值地址,原始值可以被改变。

引用数据类型:Object【Object是个大类,function函数、array数组、date日期...等都归属于Object。赋值仅是赋值,原始值不可改变。

 

JS作用域

变量的可访问性和可见性。

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

JS拥有全局作用域、函数作用域和后来增加的块级作用域。

JS变量提升

       只针对var和函数。

       对于var:在变量被声明前输出变量,会输出undefined而不是报错。

如:console.log(aa);

       Var aa=”hello”;

输出结果为:undefined.

       对于函数:函数定义会被提升,但将函数赋值给变量并在赋值之前使用函数会报错。

如:showName()

       Function showName(){

console.log(‘hello’);

}

输出结果为:hello

但    func()

var func=showName;

       Function showName(){

console.log(‘hello’);

}

输出结果为: error.

JS怎么执行的

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

 

全局执行上下文:代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份。

函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈顶弹出。

 

执行上下文步骤:

1.     绑定this

2.     创建词法环境

3.     创建变量环境

变量环境放var,词法环境放let和const。

Outer指向外部变量环境的一个指针。从上一个执行上下文找(找不到就继续往上翻找)。

image.png 栈外的上下文会无效。