js第五天

一、作用域

1.作用域的定义 

作用域:变量起作用的范围

全局作用域:整个js全局起作用

局部作用域:在函数体中变量作用范围

 代码如下(示例):

<script>
        var num = 100  //全局作用域的变量

        function fn(){
            // 局部作用域
            var num1 = 200        //num1的作用域为fn()函数体
            console.log('num11 ',num)

            function fun(){
                var num2 = 300                   //num2的作用域为fun()函数体
                console.log('num2 ',num2);
                console.log('num1 ',num1);
            }
            fun()
            

        }

        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)  // 3.如果上级作用域没有,接着向上找,至到全局作用域
                console.log('fun2 num1 ',num1) // 2.如果当前作用域没找到,到上级作用域找
                console.log('fun2 num2',num2) // 1.当前作用域找
                console.log(num3) // 4. 如果全局作用域也没有, 直接报错Uncaught ReferenceError: num1 is not defined 
				}
                fun2()
			}
            fun1()
		</script>

  3.作用域的赋值规则

    ①赋值前在当前作用域查找

    ②上级作用域查找,找到赋值

    ③上级作用域查找,直到全局作用域

    ④如果以上三个步骤都没有找到,就会将创建全局变量,然后赋值

 代码如下(示例): 

<script>
	var num = 100
			
     function fun1() {
				var num1 = 200  

				 function fun2() {
					var num2 = 300 //赋值前在当前作用域查找

					num1 = 400 // 上级作用域查找,找到赋值
					num = 500 //上级作用域查找,至到全局作用域

					num3 = 600 // 当前作用域查找,上级作用域查找,全局作用域查找,全局作用域也没查找到,将创建全局变量,然后赋值
                   
					console.log('num3 ',num3);
				}
                fun2()
			}
            fun1()
</script>

 注意:内层可以访问外层函数作用域变量

            外层不能访问内层作用域变量


二、递归函数 

概念:函数自身调用自身,这样的函数称为递归函数

作用:后面结果由前面推导出来的,可以采用递归函数简化代码

代码如下(示例): 

<script>
        function fun(n){
            if(n == 1){
                return
            }
            console.log('fun ')
            fun(n--) 
        }

        fun(2)

    </script>

注意:① 要有递归结束的条件   

            ②改变递归条件的代码

递归函数示例: 

代码如下(示例): 

 <script>
        //求 1+2+3+4+5.....+100
                // sum(5)
                //    sum(4)+5        //sum(5)
                //       sum(3)+4      //sum(4)
                //         sum(2)+3     //sum(3)
                //        sum(n-1)+n    //sum(n)
                       
        function getSum(n){
            if(n==1){
                return 1
            }
            return getSum(n-1)+n
        }
        var sum = getSum(100)
        console.log(sum)
    </script>

三、对象 

对象:面对对象

①现实生活中对象:具体一事物,对象有自己的特征行为

②软件世界:对象 Object ;属性 方法 ;属性名:属性值构成

obj称为对象名,也可以叫引用变量

对象属于复杂数据类型:

 var obj = {

name:'jakc',age:18

}

obj 数据类型名 -----> Object

key/value---->键值对的集合

  • 创建对象的两种方法

1.字面量方式:

 var jackObj={   }           //创建空对象

var jackObj={属性:属性值,

                       属性:属性值

}

代码如下(示例): 

<script>

 var jackObj = {
                name:'jack',   //姓名属性 => name属性名和jack属性值构成
                age:18,  // 年龄属性 => age属性名和18属性值构成
                sex:'男' // 性别属性 
            }  

</script>

2.构造函数方式 

 var Obj=new object()

obj.属性=属性值,

obj.属性=属性值

代码如下(示例): 

<script>
 var obj = new Object()  //空对象
                obj.name = 'jack',
                obj.age = 18

</script>
  •  对象的相关语法:

代码如下(示例):  

<script>

     //  1.创建对象:

     var obj = {            //obj称为对象名,也可以叫引用变量
          name:'jack', 
          age:18, 
          sex:'男'
 }
    
   
     //2. 访问对象给定的属性值           //通过对象访问对象属性   对象名.属性名 ====>属性值
        console.log('name :', obj.name)
        console.log('age :',obj.age)
        console.log('sex :',obj.sex)

        // 3. 修改属性值
        obj.name = 'rose'
        console.log('name ',obj.name)

        console.log(obj)
        // 4. 删除属性
        // delete obj.name
        console.log(obj)

        // 5. 添加属性
        obj.score = 98
        console.log(obj)
        
        // 6. 遍历对象 for-in 
        for(var key in obj){
            // key = 'name'  key='age' ...
            console.log('key ',key, ' value ',obj[key])

        }

        // 7. 访问属性值,属性名是变量情况
        console.log( 'name ',obj.name)
        var _name = 'name'
        console.log(obj[_name])
        console.log(obj['name'])

</script>

  • 访问对象的示例:

 代码如下(示例):  

 <script>
          //创建对象
        var student={
            name:'噜噜菲',
            num:'002',
            sex:'女',
            score:89,
            grade:'02'
        }

       //添加属性
        student.height=160

        //删除属性
        delete student.score

          
        //遍历对象属性
        for(var m in student){
          console.log(m,student[m])
          
        }
        console.log(student)
    </script>

 四、数组

数组属于复杂数据类型      类型名为:Array

作用:存储一系列有序数列的集合

  • 创建数组的两种方式

1.字面量方式

var arr=[ ]  //创建空数组

var arr=[1,2,'jack',true]

 代码如下(示例):  

<script>

 var arr = [10, 20, 30, 40]

</script>

2.构造函数方式

var arr=new Array()

 代码如下(示例):  

<script>

var arr1 = new Array(100, 200, 300, 400, 500)

</script>
  •    对象的相关语法:

  代码如下(示例):  

<script>

         //1. 创建数组
			var arr = [10, 20, 30, 40]
			        //  0   1   2   3   索引号

			//2. 访问数组元素
			console.log('arr[0] :', arr[0], ' arr[1] :', arr[1])

			//3. 数组长度
			console.log('length >> :', arr.length)

            //4. 遍历数组, 循环变量表示数组索引号从0开始
			for (var i = 0; i < arr.length; i++) {
				console.log(arr[i])
			}

             // 5. 创建数组只有一个元素, 表示创建一个空数组长度是5 length=5
			var arr2 = new Array(5)
			console.log('arr2.length >>> ', arr2.length)
			for (var i = 0; i < arr2.length; i++) {
				console.log(arr2[i])
			}

            // 6. 直接控制台打印
            console.log(arr);
</script>


数组例题: 

 1. 创建一个学生成绩数组,存储所有学生的数学成绩,分别是 89,78,90,99,67,59

  2. 求所有学生中分数最高的学生成绩,打印输出到界面

 3. 求所有学生中分数最低学生成绩,打印输出到界面

  4. 求不及格的学生有几个,打印输出到界面

代码如下(示例):  

<script>

//  1. 创建一个学生成绩数组,存储所有学生的数学成绩,分别是 89,78,90,99,67,59
           var scoreArr=[89,78,90,99,67,59]


            //     2. 求所有学生中分数最高的学生成绩,打印输出到界面
            var max=scoreArr[0]
            // 依次让后面的数与最大值max比较,如果大于max,赋值给max

			// 从数组第二个元素开始循环遍历数组,进行求最大值比较
            for(i=1;i<scoreArr.length;i++){
                if(max <scoreArr[i]){
                    max=scoreArr[i]
                }
            }
        console.log('分数最高的学生成绩:',max)    //控制台输出,所有学生中分数最高的学生成绩

            //     3. 求所有学生中分数最低学生成绩,打印输出到界面
            var min=scoreArr[0]
            // 依次让后面的数与最大值min比较,如果小于min,赋值给min

			// 从数组第二个元素开始循环遍历数组,进行求最小值比较
            for(i=1;i<scoreArr.length;i++){
                if(min > scoreArr[i]){
                    min=scoreArr[i]
                }
            }
            console.log('分数最低学生成绩:',min)    //控制台输出,所有学生中分数最低学生成绩


            //     4. 求不及格的学生有几个,打印输出到界面
            var count=0
            for(i=0;i<scoreArr.length;i++){
                if(scoreArr[i]<60){
                    count++
                }
            }
            console.log('不及格人数是 ',count)


</script>

 现有5名学生,语文成绩分别是98,87,95,89,77分,请定义一个成绩数组存储学生成绩并遍历输出 求5名学生总成绩? 求大于平均分的学生成绩?

代码如下(示例):  

 <script>
        // 现有5名学生,语文成绩分别是98,87,95,89,77分,请定义一个成绩数组存储学生成绩并遍历输出
        //           求5名学生总成绩?
        //           求大于平均分的学生成绩?

        var arr = [98, 87, 95, 89, 77]

        function printArr() {
            for (var i = 0; i < arr.length; i++) {
                console.log(arr[i])
            }
        }
        printArr()

        //总成绩
        // 98 + 87 + 95 + 89 + 77
        function getTotalScore() {
            var total = 0
            for (var i = 0; i < arr.length; i++) {
                var item = arr[i]
                total += item
            }
            console.log('总成绩是 ', total)
            return total
        }

        var total = getTotalScore()

        //平均分
        var avg = total / arr.length
        console.log('平均分 ', parseInt(avg))

        //大于平均分成绩
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] > avg) {
                console.log(arr[i])
            }
        }
    </script>

总结


以上就是今天要讲的内容,本文仅仅简单介绍了作用域、递归函数、对象、数组的相关知识,递归函数在程序中的使用是非常常见的,它可以很好地简化代码,数组的使用很重要的,它的相关语法都是以后我们经常能用到的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值