数据、变量与内存
1.什么是数据?
*存储于内存中代表特定信息的东东,本质就是0101二进制
*具有可读和可传递的基本特性
万物(一切)皆数据,函数也是数据
*程序中所有操作的目标:数据
- 算术运算.
- 逻辑运算
- 赋值
- 调用函数传参
2.什么是内存?
- 内存条通电后产生的存储空间(临时的)
- 产生和死亡:内存条(集成电路板)=>通电=>产生-定容量的存储空间= >存储各种数据=>断电=>内存全部消失
- 内存的空间是临时的,而硬盘的空间是持久的
- 分配内存:声明变量和函数或创建对象时, JS引擎会自动为此分配一 定大小的内存来存放对应的数据
- 释放内存:清空内存中的数据,标识内存可以再分配使用(内存不释放就不能复用)
- 自动释放:栈空间的局部变量
- 垃圾回调器回调:堆空间的垃圾对象
- 一块内存包含2个数据
- 内部存储的数据(一般数据/地址数据)
- 内存地址值数据
- 内存分类
- 栈:全局变量,局部变量(空间较小
- 堆:对象(空间较大)
3.什么是变量?
- 值可以变化的量,由变量名与变量值组成
- 一个变量对应一小块内存,变量名用来查找到内存,变量值就是内存中保存的数据
4.内存,数据,量三者之间的关系
- 内存是一个容器用来存储程序运行需要操作的数据
- 变量是内存的标识,我们通过变量找到对应的内存,进而操作(读/写)内存中的数据
1.问题1: var a = xoox, a内存中到底保存的是什么? - XXx是一一个基本数据
- xXx是一一个对象
- xXx是一一个变量
2.关于引用变量赋值问题 - 2个引用变量指向同一个对象,通过一个引用变量修改对象内部数据,另-一个引用变量也看得见
- 2个引用变量指向同一个对象,让一个引用变量指向另一个对象,另一个引用变量还是指向原来的对象
3.问题:在js调用函数时传递变量参数时,是值传递还是引用传递? - 只有值传递没有引用传递,传递的都是变量的值,只是这个值可能是基本数据,也可能是地址(引
用)数据 - 如果后- -种看成是引|用传递那就值传递和引用传递都可以有
4.问题: JS引擎如何管理内存?
1.内存生命周期
1).分配需要的内存
2).使用分配到的内存
3).不需要时将其释放/归还
2.释放内存 - 为执行函数分配的栈空间内存:函数执行完自动释放
- 存储对象的堆空间内存:当内存没有引用指向时,对象成为垃圾对象,垃圾回收器后面就会回收释
放此内存
对象
1.什么是对象?
- 代表现实中的某个事物,是该事物在编程中的抽象
大多个数据的集合体(封装体) - 用于保存多个数据的容器
2.为什么要用对象?
- 便于对多个数据进行统一管理
3.对象的组成
- 属性
- 代表现实事物的状态数据
- 由属性名和属性值组成
- 属性名都是字符串类型,属性值是任意类型
- 方法
- 代表现实事物的行为数据
- 是特别的属性==>属性值是函数
4.如何访问对象内部数据?
- .属性名:编码简单,但有时不能用
- 什么时候必须用[‘属性名’]:
- 属性名包含特殊字符:-、空格
- 属性名不确定
函数
1.什么是函数?
- 具有特定功能的n条语句的封装体
- 只有函数是可执行的,其它类型的数据是不可执行的
- 函数也是对象
2.为什么要用函数?
- 提高代码复用
- 便于阅读和交流
3. 如何定义函数?
- 函数声明
- 表达式
4.调用(执行)函数
- test()
- new test)
- obj.test()
- test.call/apply(obj)l
5.回调函数
1. 什么函数才是回调函数?
- 用户定义的
- 用户没有直接调用
- 但最终它执行了(在某个时刻或某个条件下 在特定条件或时刻)
2. 常见的回调函数?
- dom事件回调函数 ==> 发生事件的dom元素
- 定时器回调函数 ==> window
- 超时定时器
- 循环定时器
后面学:ajax请求回调函数、生命周期回调函数
6.IIFE
- 理解
- 全称:Immediately-Invoked Function Expression,立即调用函数表达式
- 别名:匿名函数自调用
- 作用
- 隐藏内部实现
- 不会污染外部(全局)命名空间
- 用它来编码js模块
7.函数中的this
1. this是什么?
任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window。
所有函数内部都有一个变量this。
它的值是调用函数的当前对象。
一个关键字,一个内置的引用变量;
在函数中都可以直接使用this;
this代表调用函数的当前对象;
在定义函数时,this还没有确定,只有在执行时才动态确定(绑定)的。
根据 调用函数的方式 不同,this会指向不同的对象:
以函数的形式调用,this指向window(因为,一切函数都是window的方法;call( )或apply() 通过第一个实参来指定函数中this);
以方法的形式调用,this指向方法调用的对象;
以构造函数的形式调用时,this就是新创建的对象。
2. 如何确定this的值?
- test():window
- p.test():p
- new test():新创建的对象
- p.call(obj):obj
前置知识:本质上任何函数在执行时都是通过某个对象调用的。