JS高级基础回顾
JS基础回顾
数据类型相关知识
数据变量内存
什么是数据
- 存储在内存中代表特定信息的’东西’, 本质上是0101…
- 数据的特点:
可传递,可运算–>let a=0;b=a 🔜体现可传递 - 一切皆数据
- 内存中所有操作的目标: 数据
- 算术运算
- 逻辑运算
- 赋值
- 运行函数
什么是内存?
- 内存条通电后产生的可储存数据的空间(临时的)

- 内存产生和死亡: 内存条(电路版)==>通电==>产生内存空间==>存储数据==>处理数据==>断电==>内存空间和数据都消失
- 一块小内存的2个数据
- 内部存储的数据
- 地址值
- 内存分类
- 栈: 全局变量/局部变量
- 堆: 对象

什么是变量?
- 可变化的量, 由变量名和变量值组成
- 每个变量都对应的一块小内存, 变量名用来查找对应的内存, 变量值就是内存中保存的数据
ps:变量obj.xx–>.相当于拿着地址找到后面对应的内存,所以只有当我变量中存的是地址,才可以用.
内存是用来存储数据的空间,变量是内存的标识
相关问题
赋值和内存的问题:
var a = xxx,a内存中保存的是什么
- xxx是基本数据,保存的就是这个数据
- xxx是对象,保存就是对象的地址值
- xxx是一个变量,保存是可能是基本数据也可能是地址值
变量赋值问题:
- 两个引用变量指向同一个对象,通过一个变量修改对象内部数据,另一个变量得到也是修改后数据
值传递还是引用传递:
调用函数传递变量参数时候:
- 理解1:都是值传递(基本数据和地址值都是值)
- 理解2:基本数据是值传递,引用数据是引用传递
JS管理内存:
内存生命周期
- 分配小内存空间,得到使用权
- 存储数据,反复使用
- 释放小内存
释放内存
- 局部变量:函数执行完自动释放
- 对象:成为垃圾对象后=>垃圾回收器回收
1
2
3
4
5
6
7
8var a = 3
var obj = {name:'test'}
obj = undefined||null //此时obj没有被释放,之前创建的{name:'test'},没有地址指向它,成为垃圾对象,在之后某个时刻会被垃圾回回收
function fn() {var b={}}
fn() //在函数执行后,b无法访问成为垃圾对象,程序完成后的某个时间被垃圾回收
对象
对象的概念
- 什么是对象
- 多个数据封装体
- 用来保存多个数据的容器
- 一个对象代表现实世界中的一个食物
- 为什么使用对象
- 统一管理多个数据
- 对象组成
- 属性构成:属性名(字符串),属性值(任意)
- 方法:一种特殊的属性:(属性值是函数)
如何访问对象内部数据
.属性名:编码简单,特殊时候不能用['属性名'];编码麻烦,通用
什么时候使用['属性名']:
- 属性名含有特殊字符
-``空格 - 属性名不确定时候
1 | 示例代码: |
函数
函数的概念
什么是函数:
- 实现特定功能的n条语句的封装体
- 只有函数是可以执行的,其他的数据类型不可以
为什么要用函数:
- 提高代码复用
- 便于阅读交流
如何定义函数:
- 函数声明
- 表达式 //TODO:
1 | function fn1(){fonsole.log('fn1')} //函数声明 |
调用(执行)函数
functionName()直接调用obj.functionName()通过对象调用new functionName()new调用functionName.call/apply(obj)临时让functionName()成为obj的方法
1 | // 定义一个函数 |
回调函数
什么函数是回调函数
- 自己定义的
- 自己没有调用
- 最终程序执行的
常见的回调函数
- dom时间回调函数==>发生事件的dom元素
- 定时器回调函数==>window
- ajax请求回调函数//TODO
- 生命周期回调函数//TODO
1 | // dom事件回调函数 |
IIFE(自调用函数)
Immediately-Invoked Function Expression(IIFE)
作用:
- 隐藏实现的细节
- 不会污染全局命名空间
- 用来编码js模块
1 | (function () { //匿名函数自调用 |
函数中的this
this是什么
- 任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
- 所有的函数内部都有一个变量this
- 它的值是
调用函数的当前对象
如何确定this的值
- test(): window
- p.test(): p
- new test(): 新创建的对象
- p.call(obj): obj
1 | function Person(color) { |
关于语句分号
- js一条语句的后面可以不加分号
- 是否加分号是编码风格问题, 没有应该不应该,只有你自己喜欢不喜欢
- 在下面2种情况下不加分号会有问题
小括号开头的前一条语句中方括号开头的前一条语句
- 解决办法: 在行首加分号
- 强有力的例子: vue.js库
- 知乎热议: https://www.zhihu.com/question/20298345
