JavaScript函数(下)

1、作用域:变量起作用的范围,分为全局作用域与局部作用域。

局部作用域:函数作用范围在函数体中,只能在其内部使用,每一个函数都是一个局部作用域。

全局作用域:在整个js全局中都起作用,其中定义的变量可以在任何地方使用。

<script>
        var n = 10;//全局作用域
        function fun() {
            var m = 100//局部作用域
        }
    </script>

2、变量访问规则:访问变量时先在自己内部作用域查找变量,如果没有就逐层往上级作用域查找,直到全局作用域为止,如果还是没有,就报错:

3、变量赋值规则:给变量赋值时,先在自己内部作用域查找变量,如果没有就逐层往上级作用域查找,直到全局作用域为止,如果还是没有,就将当前变量声明为全局变量并赋值:

4、作用域链:变量访问或赋值时,先在自己的作用域查找,再逐层向上查找,直到最外层全局作用域,这样的逐层查找关系就叫作用域链。 

5、递归函数:函数定义好之后不能自己执行,需要使用函数调用语句才会执行,调用语句一般写在函数体外面,如果出现在函数内部调用自己,这样的函数就叫做递归函数:

递归函数一旦执行就会循环往复没有尽头(也叫死递归),这时就需要给递归函数设置递归结束条件:

(1)递归函数的运行原理:

 (2)递归函数的实现:

<script>
        //1.函数调用自身
        function fn() {
            fn()
        }
        //2.递归结束条件
        function fn() {
            if (n == 1) {
                return 1
            }
        }
        // 3.前后关系,后面结果与前面值的关系,例如:1 + 2 + 3 + 4 + 5 = ?
        /**
         * 规律:f(n) = f(n - 1) + n
         * f(5) = f(4) + 5
         * f(4) = f(3) + 4
         * f(3) = f(2) + 3
         * f(2) = f(1) + 2
         * f(1) = 1
        */
    </script>

(3)例题1:入职薪水10K,每年涨幅5%,50年后工资多少?

// 入职薪水10K,每年涨幅5%,50年后工资多少?
        function getSumSalary(year) {
            if (year == 1) {
                return 10 * 12;
            }
            return getSumSalary(year - 1) + getSumSalary(year - 1) * 0.05;
        }
        var sum = getSumSalary(50);
        console.log(sum);

(4)例题2:递归-斐波那契 1, 1, 2, 3, 5, 8, 13 ...  (前两项都是 1, 后面项等于前两项之和  )

// 递归-斐波那契 1, 1, 2, 3, 5, 8, 13 ...   前两项都是 1, 后面项等于前两项之和
        function getResult(num) {
            if (num == 1 || num == 2) {
                return 1;
            }
            return getResult(num - 2) + getResult(num - 1);
        }
        var result = getResult(6);
        console.log(result);

6. 初步了解对象

(1)对象(复杂数据类型)定义:

 <script>
//         现实生活
//               对象
//                 => 具体一个事物
//                       张三        李四
//                       x100手机   pm001手机
//                      区别: 
//                        行为  特征
//         软件世界
//               对象
//                    特征: 属性
//                    行为: 方法
    </script>

(2)对象的创建方式有两种:

 (3)访问对象属性:对象.属性名

<script>
        var obj = {
            name: 'jack'
        }
        obj.name
    </script>

练习1:

<script>
        // var obj = {
        //     name: 'jack'
        // }
        // obj.name
        /**
         * 创建一个名为student的学生对象,有属性学号num,性别sex,班级grade, 成绩score, 姓名name
           分别用字面量方式和构造函数方式创建.
           要求打印显示学生信息到页面
        */

        var student = {//字面量方式创建对象
            num: 2022,
            sex: 'nv',
            grade: 2,
            score: 89,
            name: 'lili'
        }
        for (var key in student) {
            console.log(student[key]);
        }

        var student = new Object()//构造函数方式创建
        student.num = 2022,
            student.sex = 'nv',
            student.grade = 2,
            student.score = 89,
            student.name = 'lili'
        for (var key in student) {
            console.log(student[key]);
        }
    </script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值