一、作用域
1. 声明变量起作用的范围
1.全局作用域:整个js全局作用
2.局部作用域:在函数体中作用范围
内层可以访问外层作用域变量
外层不能访问内层作用域变量
<script>
var num = 100
function fn() {
// 局部作用域
var num1 = 200
console .log("num11",num)
function fun(){
var num2=300
console .log("num2",num2)//旨在函数体中被访问
}fun()
}
// console .log("num1",num1)//Uncaught ReferenceError: num1 is not defined
console .log("num22",num)
fn()
</script>
2.作用域访问规则:如下例子
<script>
var num = 100
function fun1(){
var num1=200
console.log("fun1 num",num)
function fun2(){
var num2=300
console.log("fun2 num",num)//如果上级的作用域没有,接着向上找,直到全局作用域
console.log("fun1 num",num1)//如果当前作用域没有找到,到上级作用域找
console.log("fun2 num",num2)//当前作用域找访问的变量
console.log(num3);//全局作用域都没找到报错:Uncaught ReferenceError: num1 is not defined
}
}
</script>
3.作用域的赋值规则:如下例子
<script>
var num = 100
function fun1() {
var num1 = 200
// console.log("fun1 num",num)
function fun2() {
var num2 = 300//赋值前在当前作用域查找
num1 = 400//上级作用域查找,找到赋值
num = 500//上级作用域查找,直到全局作用域
num3 = 600//上级作用域查找,全局作用域查找,全局作用域也没有查找到,将自动创建全局变量,然后赋值
}
}
</script>
作用域链:(重点)
变量访问或赋值时,
先在自己的作用域查找,
如果没找到,再一层一层向上查找,至到最外层全局作用域。
这种层层查找关系,叫作用域链
二、递归函数
递归函数:
函数自身调用自身,这样的函数成为递归函数
注意:
1. 要有递归结束的条件
2.改变递归的条件的代码
<script>
// 死递归