一、JS的编译和执行
- 偏原理
- 可以不懂原理,只需要注意现象,可以正常写代码
- 懂原理,帮助你提升代码性能,优化;方便面试
- js是一门解释性语言
- 预先编译,再执行
- 先通读全文,在解释含义
- 找到var和function,做出对应提升
- 编译时
- 提升
- 执行时
- 按照逻辑,结构正常执行
变量和函数会提升
- var的提升
- 提前声明,=号的位置赋值
console.log(a); // undefined var a = 10; console.log(a); // 10
- ↑↑↑↑等价于↓↓↓↓
var a; console.log(a); // undefined a = 10; console.log(a); // 10
- 提前声明,=号的位置赋值
- function的函数提升
- 整体提升
- 即提前声明,有提前赋值
- 如果var遇到function
- 赋值式创建函数 ********
var fn = fucntion(){}
- 提升的是var,不是function
- 变量和函数重名
var a = "hello"; function a(){}
- var提升的更高,所以function占便宜,生效的是function
- 赋值式创建函数 ********
二、函数的高级应用-递归
- 在函数内部执行自己
- 递归就是函数自己调用自己
- 递归类似于循环
- 递归函数要注意停止/返回,否则会造成死递归
- 递归比较消耗性能,尽量少用
- 详细见
4递归.html
三、对象的介绍
1. 什么是对象
-
其实就是一种事物的描述,在程序中对象是一种数据类型
- 描述水杯:
- 材质:塑料
- 容量:1000ml
- 颜色:白色
- 形状:圆形
- 功能:容器
- 把以上信息,组合打包用来表示一件事物,之后,就叫对象
- 描述水杯:
-
程序中的对象主要用来:存储信息
2. 如何得到对象(创建对象)
- 字面量
var o1 = {}
- 构造函数
var o2 = new Object();
3. 对象的意义和本质
- 意义(功能)
- 存储数据(信息)
- 编程(面向对象编程)
- 本质
- 键值对
4. 对象的操作
-
点语法(.)
- 对象.属性名
var o = {};
- 读
console.log(o.name);
- 写
o.name = "Admin"; o.age = 18; o.sex = "男"; o.sayHello = function(){ console.log("你好,我叫:" + obj.name); }
-
字面量创建对象时,可以很方便的立即写入初始属性
var obj = { name: "Admin", age: 18, sex: "男", sayHello:function(){ console.log("你好,我叫:" + obj.name); } };
-
注意:任何两个对象都不相等
- 如果相等了,意味着就是一个对象
四、数组的介绍
1. 什么是数组?
- 数据的组合,一组数据
- 当需要操作多个数据时,可以给数据打包,数组
- 数组其实也是对象,只是存储数据的形式不一样,但是类型是一样的
2. 如何得到数组(创建数组)
-
字面量
var arr1 = [];
-
构造函数
var arr2 = new Array();
-
区别
- 当字面量内只有一个数值型数据时,表示一个数据
- 当构造函数内只有一个数值型数据时,表示长度
-
注意区别,按需选择,顺手