javascript函数(下)
一、变量的作用域
概念:一个变量生效的范围,变量不是在所有地方都能访问,它能访问的范围就叫作用域。作用域分为全局作用域和局部作用域。
1.全局作用域
任何地方都可访问的变量就是全局变量,它对应的区域就是全局作用域
(1)全局作用域是最大的作用域;
(2)全局作用域中定义的变量可以在任何地方使用;
(3)页面在浏览器中打开时,浏览器会自动给我们生成一个全局作用域window,该作用域要页面关闭才会销毁。
2.局部作用域
局部作用域就是在去哪聚作用域下开辟出来的一个相对小一些的作用域。
(1)局部作用域只能在局部作用域范围内使用;
(2)每个函数都是一个局部作用域。
二、变量使用规则
1.访问规则
访问规则就是获取变量值的规则。先在自己的作用域中查找,如果没有就再从上一级作用域查找,直到找完全局作用域,如果都没找到,就报错。
2.赋值规则
赋值实际上是两个步骤,找变量和给变量赋值。
(1)找变量:找变量的规则与变量的访问规则一样,先在自己的作用域中查找,如果没有再往上一级作用域找。
(2)给变量赋值:找到变量后就给对应变量赋值。如果没有找到变量,程序会将该变量默认定义为全局变量。
3.作用域链:
变量访问或赋值时先在自己的作用域查找,如果没找到,再一层一层向上查找,至到最外层全局作用域。
三、递归函数
概念:一个函数内部调用自己,这样的函数称为递归函数
注意:
(1)写递归函数时一定要写结束递归的条件,否则会变成死递归。
(2)递归函数代码很简洁,但是效率很低,因为它要不停地调用自己,当调用次数达到系统的极限时,系统会直接崩溃,程序没运行完的话就得不到最终结果。
例:递归函数求前n项之和
/**
分析:
* 累加
* n=1 sum1=1
* n=2 sum2=sum1+2
* n=3 sum3=sum2+3
* n=4 sum4=sum3+4
* ...
* n=n sumn=sum(n-1)+n
*/
function sum(n){
if (n==1) { //结束递归的条件
return 1
}
var s=sum(n-1)+n //递归语句,在函数内调用本身函数
return s
}
console.log(sum(20));
过程解析如下图:
运行得到结果: