函数2:function作用域,JS变量的访问规则、赋值规则,了解递归

函数中允许嵌套函数

函数作用域:全局作用域,局部作用域:

 

    <script>
        /* 
            作用域:一个变量可以使用,可以生效的范围。
            作用域有2个:
                1.全局作用域:直接书写在script标签中的变量,定义在全局作用域中的变量在任何一个地方都可以使用
                2.局部作用域(私有作用域、函数作用域):在js中只有函数才可以生成局部作用域
            我们的变量定义在哪个位置他的作用域就在哪里

            有了作用域变量就必然会有自己的使用范围(使用规则)
            关于变量的使用规则:变量的访问规则、变量的赋值规则。

            研究规则之前,需要先搞清除:什么叫定义,什么叫访问,什么叫赋值。
            定义:变量写了var了,就叫做定义
                var a;====是定义,定义了一个名字叫做a的变量
                a = 10;===是赋值,把10的值赋值给a了
                console.log(a);==是访问,尝试获取到a的值

                var b = 100;===有定义也有赋值,先定义一个b,再对b进行赋值。
        */
        var a = 10//全局作用域(全局变量)
        function fn() {
            var b = 20//局部作用域(局部变量)
            console.log(a);
        }
        fn()
    </script>

js变量的访问规则,赋值规则:

当我想获取一个变量的值的时候,我们管这个行为叫做 访问:

变量访问规则:局部访问,没有,就往上访问,直到全局也没有,代码报错

当你想给一个变量赋值的时候,那么就先要找到这个变量,在给他赋值:

变量赋值规则:局部访问,没有,就往上访问,直到全局也没有,就会把这个变量自动定义为全局变量

    <script>
        /* 
            变量的访问规则:
                访问的时候先再自己的作用域中看有没有该变量,有就使用,没有就去到上一层作用域中找,如果上一层中有就使用
                如果没有继续向上找,知道找到全局为止,如果全局依然没有,代码就报错。
eg:
        */
var num = 100
function fn() {
var num2 = 200
function fun() {
var num3 = 300
console.log(num3) // 自己作用域内有,拿过来用
console.log(num2) // 自己作用域内没有,就去上一级,就是 fn 的作用域里面找,发现
有,拿过来用
console.log(num) // 自己这没有,去上一级 fn 那里也没有,再上一级到全局作用域,发现
有,直接用
console.log(a) // 自己没有,一级一级找上去到全局都没有,就会报错
}
fun()
}
fn(

    

        /* 
            要想给一个变量赋值,首先要先找到这个变量才能完成赋值操作

            变量的赋值规则:
                先在自己的作用域中找该变量,能找到,就赋值,找不到,就去上一层找,上一层作用域有,就给上一层完成赋值操作
                如果上一层依然没有,就继续一层一层往上找,直到全局为止,如果全局依然没有,那么就把这个变量自动定义成全局
eg:
        */

function fn() {
num = 100
}
fn()
// fn 调用以后,要给 num 赋值
// 查看自己的作用域内部没有 num 变量
// 就会向上一级查找
// 上一级就是全局作用域,发现依旧没有
// 那么就会把 num 定义为全局的变量,并为其赋值
// 所以 fn() 以后,全局就有了一个变量叫做 num 并且值是 100
console.log(num) // 100

    </script>

(了解即可)递归:递归就是一个自己调用自己的手段,和循环类似

    <script>
        /* 
            斐波那契数列数列:1 1 2 3 5 8 13 。。。
            规律:第一个数字和第二个数字永远为1
                从第三个数字开始:是前面2个数字相加之和
            利用递归求出第n项的数字?假设我想求第10个数字,我们就要知道第9个和第8个数字
            一直往前问,递归的思想
            写递归的技巧:
                先写一个函数
                在函数写结束函数的条件(不往下问的条件)
                找往下问的规律:求第n项,应该是前面2个数字相加之和
                    也就是n的数字 = (n-1)+(n-2)
                    返回值规律 return fn(n-1)+fn(n-2)
        */
        function fn(n) {
            if (n == 1 || n == 2) {
                return 1
            }
            return fn(n - 1) + fn(n - 2)
        }

        var res = fn(8)
        console.log(res);
    </script>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值