面向对象编程第四篇

面向对象复习

递归

什么是递归

在函数直接或者间接的调用自己,就是递归

递归的两个要素

  1. 自己调自己
  2. 结束条件(必需)

化归思想

化繁为简,化难为易的过程, 转化 归结 的简称

前n项和

n的m次方

斐波那契数列

递归获取后代元素(重点!!)

词法作用域

作用域就是变量起作用的范围

在代码写好的时候,根据代码的书写结构,就可以确定变量的作用域,这种作用域就是词法作用域

词法作用域又叫静态作用域

js中没有块级作用域(代码块限定的作用域叫做块级作用域)

变量提升(hoisting)

JS代码执行分两个阶段:1.预解析阶段 2.执行阶段

在预解析阶段,会对代码中所有的变量声明以及函数声明做提升操作,提升到其所在的作用域的最顶上!

特殊情况

  1. 函数同名的时候,会全部提升,但是后面的会覆盖掉前面的
  2. 函数和变量同名的情况,只会提升函数,忽略掉变量的声明
  3. 变量提升是分作用域的
  4. 变量提升是分段(script标签)的
  5. 条件式函数声明(在条件语句中的函数声明),会将条件式函数声明视为函数表达式做处理,只会提升函数名,函数体不提升
  6. 函数中形参赋值的过程是 在变量提升之前!

函数中的形参,就相当于是在函数中声明一个局部的变量