作用域:
概念:
什么是作用域,就是一个变量可以生效的范围。
变量不是在所有地方都可以使用的,而这个变量的使用范围就是作用域。
作用域分为:全局作用域,局部作用域。
全局作用域:
全局作用域是最大的作用域,在全局作用域中定义的变量可以在任何地方使用,页面打开的时候,浏览器会自动给我们生成一个全局作用域window。这个作用域会一直存在,直到页面关闭就销毁了。
局部作用域:局部作用域就是在全局作用域下面开辟出来的一个相对小一些的作用域,在局部作用域中定义的变量只能在这个局部作用域,别的都不行。每个函数,都是一个局部作用域。
有了作用域以后,变量就有了使用范围,也就是有了使用规则,变量使用规则分为两种,访问规则和赋值规则。
访问规则:
赋值规则:
作用域链:变量访问或赋值时,先在自己的作用域查找,如果没找到,再一层一层向上查找,直到最外层全局作用域。这种层层查找关系,叫作用域链。
递归函数:函数定义好后,不能自己执行,需要使用函数调用语句调用才会执行,函数调用语句一般写在函数体外面,但是如果将函数调用语句写在函数体中,也就是在一个函数内部,调用自己,这种函数称为递归函数;
上面的递归函数一旦执行,会循环往复,没有止尽,需要给递归函数设置递归结束条件。不然就是一个没有尽头的递归函数,我们叫做死递归。
求1至5的和 1+2+3+4+5=?
<script>
function fun(n){
if(n==1){
return 1
}
return fun(n-1)+n
}
console.log(fun(5))
</script>
运行原理:
解决问题:后面的结果,是由前面推导的
实现递归
1.函数自身调用自身
function fn(){
fn()
}
2.结束递归条件
function fn(){
if(结束条件){
return 想要返回的值
}
}
3.前后关系,后面结果与前面值关系
例如:1+2+3+4+5=?
f(5)=f(4)+5
=>f(3)+4
=>f(2)+3
=>f(1)+2
return 1
f(n)=f(n-1)+n