Day9
1、 js的编译和执行
js是一门解释性语言,会预先编译,再执行。(先通读全文,再解释含义)
编译时,会有 提升
变量和函数会提升
变量var的提升
会提前声明,=号的位置赋值
console.log(a); //undefined
var a = 10;
console.log(a); //10
↑↑↑↑等价于↓↓↓↓
var a;
console.log(a);
a = 10;
console.log(a);
function 函数的提升
整体提升
即提前声明,又提前赋值
如果var遇到function
var fn = function(){};
提升的是定义的变量fn,不是function函数
变量和函数重名
var a = “hello”;
function a(){}
var的优先级更高,变量a会预先占用内存,函数和变量同时提升,赋值hello在后面,由于此时函数名和变量名重复,所以生效的是function。
2、 函数的高级应用 - 递归
递归就是函数在其内部执行自己
递归类似于循环
递归函数要注意停止/返回,否则会造成死递归
递归比较消耗性能,尽量少用
算法核心:
在有限次可预见性结果中,找到结果与上一次结果之间的关系。
f(n)与f(n-1)的关系有时候很简单,如同走楼梯,状态单一;又有时如同细胞分裂,多种状态组合影响结果。
关键在于梳理清楚本次结果和上一次结果的关系有哪些方面或是因素。
在草稿纸上写出前几次的结果,或者画图,这样更容易找到规律,这种规律实际上就是递归方程。
在算法的分析中,当一个算法中包含递归调用时,其事件复杂度的分析会转化成为一个递归方程的求解。
3、 对象
- 概念
对象是一种事物的描述,在程序中,对象是一种数据类型。
对象主要用来:存储信息。 - 创建对象
字面量:
var a = {}
构造函数:
var a = new Object(); - 对象的本质和意义
意义(功能)
存储数据(信息)
编程(面向对象编程)
本质
键值对 - 对象的操作
点语法(.)
对象.属性名
读
console.log(o.name);
写:
o.name = “Admin”;
o.age = 19;
o.sex = “男”;
o.sayHello = function(){
console.log(“你好,我叫”+ o.name);
}
字面量创建对象时,可以立即写入初始的属性
var obj = {
name = “admin”;
age: 18;
sex:”男”;
sayHello:function(){
console.log(“你好,我叫:”+ obj.name);
}
注意:任何两个对象都不相等,如果相等了,意味着是一个对象
4、 数组
概念:
数组就是数据的组合
数组其实也是对象,只是存储数据的形式不一样,但是类型是一样的。
创建数组:
字面量:
var arr(数组名) = [];
构造函数:
var arr = new Array(); 注意大小写
区别:
当字面量内只有一个数值型数据时,表示一个数据
当构造函数内只有一个数值型数据时,表示长度。