技组 & 词法作用域

97 阅读3分钟

简单的笔记分享希望对大家有些帮助

1.重新认识javascript

javascript原名(ECMAScript)

代码块和内存管理借用的是java

代码块语法借用的是c++

函数机制借用的是Scheme(函数式)

this和原型链借用的是Self(面向对象)

是最快的即时编译语言

最快 开源最多 应用最广 离用户最近的 编译语言

2.计算机的组成

CPU 计算单元

显卡GPU 计算图形

内存 RAM 是随机储存单元 高速存储

固态硬盘 ROM 是只读存储 长期存储 数据持久化

3.变量和内存

3.1认识内存

内存和硬盘都是有存储颗粒组成 用不同电流可以改变他的结构 1b就是一个内存颗粒 1b=8个字节

CPU +RAM 是图灵机

CPU +RAM+ROM 这样的结构称为冯诺伊曼结构

3.2内存划分

1.栈 特点速度快体积小 自动分配 从低到高 后进先出

2.堆 特点 手动分配 速度慢 从高到低

3.交换区 存在于堆和栈之间 用于不同线程交换数据

3.3指针&引用

指针可以嵌套 存内存的地址

引用 不能嵌套最终指向的是堆里面的对象

3.4垃圾回收

1.出栈自动回收 结束后自己清除

2.引用计数 清除循环会很困难

3.标记清除

3.5溢出和泄漏

溢出

分为两种

栈溢出是声明变量过多

堆溢出是数据过大

泄漏是指没有自动清除变量有残留

4.数据类型

基本数据类型 (7种) string number boolean null undefeated biglnt symbol

引用数据类型 除了基本数据类型其他的都是引用数据类型

5.作用域

代码中能够访问的范围

5.1词法作用域

5.1.1块级作用域

关键字:let const const声明的值是不能改变的

{} if/else for/while switch/case try/catch

顺序执行(代码怎么写怎么执行),先声明在使用 与运行次数有关 外部不能访问

5.1.2函数作用域

关键值 :var function function的优先级更高

function(){} const()=>{} 箭头函数

一个函数一个作用域 可以先使用在声明 与运行次数无关 外部也不能访问

函数作用域中也会有块作用域

5.1.3 闭包机制

闭包就是从内访问外外部的变量 生成一条作用域链

闭包机制 词法作用域可以嵌套,内部函数可以访问外部(词法)作用域的变量

可能会造成泄漏 主要是开发者没有用好闭包

scopes 作用域链:数组,标识从内到外的闭包对象

5.1.4 script脚本 作用域

变量可以相互访问

var 变量 会声明到全局对象 window

script/global 声明的变量 即使内部没有访问,也会形成闭包

5.1.5 global 全局作用域

没有手段可以直接声明全局变量

可以再全局对象上添加属性:window(bom)document(dom)naviagtor(bom)