面向对象复习
递归
什么是递归
在函数直接或者间接的调用自己,就是递归
递归的两个要素
- 自己调自己
- 结束条件(必需)
化归思想
化繁为简,化难为易的过程, 转化 归结 的简称
前n项和
n的m次方
斐波那契数列
递归获取后代元素(重点!!)
词法作用域
作用域就是变量起作用的范围
在代码写好的时候,根据代码的书写结构,就可以确定变量的作用域,这种作用域就是词法作用域
词法作用域又叫静态作用域
js中没有块级作用域(代码块限定的作用域叫做块级作用域)
变量提升(hoisting)
JS代码执行分两个阶段:1.预解析阶段 2.执行阶段
在预解析阶段,会对代码中所有的变量声明以及函数声明做提升操作,提升到其所在的作用域的最顶上!
特殊情况
- 函数同名的时候,会全部提升,但是后面的会覆盖掉前面的
- 函数和变量同名的情况,只会提升函数,忽略掉变量的声明
- 变量提升是分作用域的
- 变量提升是分段(script标签)的
- 条件式函数声明(在条件语句中的函数声明),会将条件式函数声明视为函数表达式做处理,只会提升函数名,函数体不提升
- 函数中形参赋值的过程是 在变量提升之前!
函数中的形参,就相当于是在函数中声明一个局部的变量