堆栈
- 栈: 存储js的基本数据类型 undefined null string number boolean
- 堆: 存储js的引用数据类型 function object array 引用类型的数据的地址指针是存储在栈中的,要访问引用类型的值的时候,需要先从栈中获取对象的地址指针,然后通过地址指针找到堆中存储的数据
- 栈 线性结构 后进后出 堆 方便存储和开辟内存空间
typeof()
1 | typeof(typeof(123)) => string //任何typeof typeOf 都是string |
类型转换
- 显示类型转换
1 | Number('123') //number |
- 隐式类型转换
function
- 高内聚,低耦合 -> 模块的单一责任制
- 函数声明
1 | function test(){ |
- 函数名的命名规则
- 不能数字开头
- 字母 _$
- 包含数字
- 小驼峰命名法 myMethods()
- 匿名函数表达式 函数字面量
1 | var test = function test1(){ |
-
形参和实参数量可不等
-
js引擎默认隐式添加return
- 终止函数执行
递归
- 函数自己调用自己 | 性能问题
- 规律
- 出口
预编译
-
1.检查通篇的语法错误
-
1.5预编译的过程
-
2.解释一行,执行一行
-
函数声明整体提升,变量只有声明提升,赋值是不提升
-
暗示全局变量 imply global variable
1 | var a = 1 |
- AO activitive object 活跃对象 函数上下文
1 | AO = { |
- GO global object 全局上下文
1 | GO{ |
函数
- 函数也是一种对象类型 引用类型 引用值
对象
- 有些属性是我们无法访问的
- JS引擎内部固有的隐式属性
[[scope]]
- 函数创建时,生成的一个JS内部的隐式属性
- 函数存储作用域链的容器,作用域链
- AO/GO
- AO 函数的执行器上下文 当函数被执行时前一刻
- GO 全局的执行器上下文
- 函数执行完成以后,AO是要销毁的
- AO是一个即时存储容器
闭包
-
return 一个值就是引用
-
当内部函数被返回到外部并保存时,一定会产生闭包,闭包会产生原来的作用域链不释放,过度的闭包可能会导致内存泄露,或加载过慢
-
闭包在ECMA262上的定义:当一个函数被系统创建时,闭包就会被一同创建出来
-
一个函数统一与外界环境(作用域)捆版在一起的,这种现象叫做闭包
-
更高的封装性和集成性
1 | //global scope -> 闭包 |
立即执行函数
-
IIFE - immediately-invoked function expression
-
自动执行,执行完成以后立即释放
1 | (function(){}()); //W3C建议(function(){})();//表达式才能被执行符号执行//函数名自动被忽略 |
- 函数声明变成表达式的方法 + - ! || &&
1 | (1,2) //返回的是2 逗号运算符 返回后面那一个 |
Object
1 | delete obj.sth |
1 | //对象字面量 |
包装类
-
原始值没有自己的方法和属性
-
原始值通过构造函数实例化之后可以添加属性和方法
-
undefined 和 null 不可以设置任何的属性和方法
1 | //JS包装类 |
ASCII码 表1 0 - 127 表2 128 - 255 1个字节 byte
UNICODE码 涵盖ASCII码 2个字节 charCodeAt()
Prototype
-
构造函数实例化出来的对象永远指向构造函数的原型对象
-
prototype.constructor -> 构造函数本身
1 | function Car(){ |
- 引号最好使用单引号,双引号有可能造成后端转译冲突
1 | //防止变量污染 立即执行函数 插件封装 |
高阶函数
- 闭包 + 回调 -> 高阶函数
- 回调
- callback -> 回应 -> 通讯的回应
- call -> 调用 行为
- trigger -> 出发 -> 事件的发生
- CALL -> Function | Trigger -> Event
- event -> 通过一个程序或者是交互被处罚 -> 执行相应的处理程序