9月9日-8月10日(arguments的使用、函数的调用、函数的声明方式、JS作用域、JS预解析、JS对象)

目录

一、arguments

 1.1 arguments是什么 

 1.2 arguments的作用 

 1.3 arguments的特性 

 1.4 使用arguments求任意个数的最大值 

二、函数可以调用另外一个函数

三、函数的4个案例(加强复习)

四、函数的声明方式

 4.1 自定义函数方式 (命名函数)

 4.2 函数表达式方式 (匿名函数)

五、JavaScript作用域

5.1 什么是作用域

5.2 作用域的分类

1)全局作用域

2)局部作用域 

3)块级作用域

5.3 变量的分类

1)全局变量

2)局部变量

3)块级变量

4)从执行效率来看全局变量和局部变量

5.4 作用域链

案例1

案例2

 六、JavaScript 预解析 

6.1  js引擎(解释器)运行js代码分两步

6.2 预解析

6.3 预解析能解释一些问题 

1)先输出变量,再初始化变量(声明并赋值),为什么输出的变量显示未定义?

2)使用函数关键字声明函数时,把调用写在声明之前,为什么不会报错?

3)使用函数表达式声明函数时,把调用写在声明之前,为什么会报错?

6.4 预解析案例 

七、JavaScript 对象

7.1 什么是对象

7.2 为什么需要对象

7.3 创建对象的三种方式

1)利用 字面量 创建对象

                对象的创建:使用花括号{ }

                对象的使用(调用里面属性和方法)

                变量、属性、函数、方法的区别

2)利用 new Object 创建对象

3)利用 构造函数 创建对象

                为什么需要使用构造函数? 什么是构造函数?

                构造函数的使用 

                注意事项

                构造函数和对象

                new关键字执行过程

7.4 遍历对象 

7.5 对象小结

八、课后作业

作业1:创建一个电脑对象 (利用 对象字面量) 

作业2:创建一个按钮对象 (利用 new Object)

作业3:创建一个车的对象 (利用 构造函数)

作业4:遍历以下对象

作业5:描述下面代码的输出结果以及运行原因

作业6:使用arguments完成函数getResult,实现得到输入的所有的数值中的最小值、最大值、平均数、总和等功能

作业7:书写一个函数,判断指定数据是否存在于指定数组中

作业8:两个数组之间的比对(筛选出另一个数组没有的元素)


一、arguments

 1.1 arguments是什么 

        arguments是当前函数的一个内置对象,且只有函数才有这个对象,所有函数都有这个内置对象。

        此外,它是一种伪数组。具有数组的某些特性。

 1.2 arguments的作用 

        当我们不确定有多少个参数传递的时候,可以用 arguments 获取。因为 arguments

对象中存储了传递的所有实参

 1.3 arguments的特性 

        arguments并不是真正意义上的数组,而是一种伪数组,具有数组的一些特性,也不具有某些特性。

 1.4 使用arguments求任意个数的最大值 

代码

<script>
        // 利用函数求任意个数的最大值
        function getMax() { // arguments = [1,2,3] 已经把实参的值存储到数组(对象)中了
            var max = arguments[0];
            for (var i = 1; i < arguments.length; i++) {
                if (arguments[i] > max) {
                    max = arguments[i];
                }
            }
            return max;
        }
        console.log(getMax(1, 2, 3));
        console.log(getMax(1, 2, 3, 4, 5));
        console.log(getMax(11, 2, 34, 444, 5, 100));
    </script>

 结果

二、函数可以调用另外一个函数

        因为每个函数都是独立的代码块,用于完成特殊任务,因此经常会用到函数相互调用的情况。 

代码:

        function fn1() {
            console.log(111);
            fn2();
            console.log('fn1');
        }

        function fn2() {
            console.log(222);
            console.log('fn2');
        }
        fn1();

结果

三、函数的4个案例(加强复习)

代码:

       function getReverse(arrVitual) {
            var arrNew = [];
            for (let i = arrVitual.length - 1; i >= 0; i--) {
                arrNew[arrNew.length] = arrVitual[i];
            }
            return arrNew;
        }

        // var arrActual = ['red', 'yellow', 'orange', 'green', 'blue', 'purple'];
        var arrActual = [];
        var num = Number(prompt('请输入数组长度:'));
        for (let i = 0; i < num; i++) {
            arrActual[i] = prompt('请输入第' + (i + 1) + '个数组元素(字符串):');
        }
        var resultArr = getReverse(arrActual); // result是一个数组 (函数返回的是一个数组)
        alert('原始数组为: [ ' + arrActual + ' ]\n' + '翻转后的数组为: [ ' + resultArr + ' ]');

效果:

代码:

         function bubbleSort(arrVitual) {
            var temp;
            var operation = prompt('升序请输入1,降序请输入2');
            switch (operation) {
                case '1':
                    for (let i = 0; i <= arrVitual.length - 1; i++) {  //趟数
                        for (let j = 0; j < arrVitual.length - 1 - i; j++) { //每一趟的次数
                            if (arrVitual[j] > arrVitual[j + 1]) {
                                temp = arrVitual[j];
                                arrVitual[j] = arrVitual[j + 1];
                                arrVitual[j + 1] = temp;
                            }
                        }
                    }
                    break;
                case '2':
                    for (let i = 0; i <= arrVitual.length - 1; i++) {  //趟数
                        for (let j = 0; j < arrVitual.length - 1 - i; j++) {
                            if (arrVitual[j] < arrVitual[j + 1]) {
                                temp = arrVitual[j];
                                arrVitual[j] = arrVitual[j + 1];
                                arrVitual[j + 1] = temp;
                            }
                        }
                    }
                    break;
                default:
                    break;
            }
            return arrVitual;
        }

        var arrActual = [];
        var num = Number(prompt('请输入数字的个数:'));
        for (let i = 0; i < num; i++) {
            arrActual[i] = Number(prompt('请输入第' + (i + 1) + '个数:'));
        }
        var resultArr = bubbleSort(arrActual);
        alert('数据排序后为: ' + resultArr);

效果:

代码:

 function isLeapYear(y) {
            if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
                return true;
            }
            return false;
        }
 var year = Number(prompt('请输入任意的年份:'));
 var result = isLeapYear(year);
 result == false ? alert(year + '年不是闰年') : alert(year + '年是闰年');

效果:

 

(用到一个函数调用另一个函数)

代码:

        function isLeapYear(y) {
            if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
                return true;
            }
            return false;
        }

        function Day(yy) {
            var days;
            var temp = isLeapYear(yy); //将函数Day的形参作为实参 传给函数IsLeapYear的形参y
            if (temp == true) {
                days = 29;
            }
            else {
                days = 28;
            }
            return days;
        }
        var year = Number(prompt('请输入任意的年份:'));
        var result = Day(year);
        alert(year + '年的二月份有【' + result + '】天');

效果:

代码:(简化版)

         // 判断是否为闰年的函数
        function isRunYear(year) {
            // 如果是闰年我们返回 true  否则 返回 false 
            var flag = false;
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                flag = true;
            }
            return flag;
        } 

        // 用户输入年份,输出当前年份2月份的天数 闰年的二月份有29天
        function backDay() {
            var year = prompt('请您输入年份:'); // 在函数内部让用户输入,这样参数就可以直接给另一个函数,避免了参数给来给去
            if (isRunYear(year)) { // 调用函数,if括号里不加条件 若本身为真的话就执行花括号里的语句
                alert(year + '年是闰年,2月份有29天');
            } else {
                alert(year + '年不是闰年,2月份有28天');
            }
        }
        backDay(); //直接调用 不写参数 


      

效果:

四、函数的声明方式

 4.1 自定义函数方式 (命名函数)

4.2 函数表达式方式 (匿名函数)

注意

 (1)fn 是变量名 不是函数名

 (2)变量里面存的是值 而 函数表达式里面的变量存的是函数

 (3)函数表达式也可以进行传递参数,形参写到function()里,实参写到fn()里

五、JavaScript作用域

5.1 什么是作用域

        作用域就是:起作用和效果的范围

        主要是针对代码名字(变量)在某个范围内起作用和效果,

        目的是为了提高程序的可靠性,更重要的是减少命名冲突

5.2 作用域的分类

1)全局作用域

        在整个script标签中或者是在一个单独的js文件中。

2)局部作用域 

        在函数内部就是局部作用域。

3)块级作用域

        就是用花括号进行包含的范围。比如if { } for { }

5.3 变量的分类

        根据作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天一定要早睡

你的鼓励,我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值