全局作用域

作用域

变量起作用的范围

全局作用域和局部作用域

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

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

内层可以访问外层作用域变量

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

<script>
        var num = 100

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

            function fun(){
                var num2 = 300
                console.log('num2 ',num2);
                console.log('num1 ',num1);
            }
            fun()
            // console.log('num2 >>> ',num2);

        }

        // console.log('num1 ',num1) // Uncaught ReferenceError: num1 is not defined
        console.log('num22 ',num)
        fn()

    </script>

作用域访问规则

1.当前作用域找

2.如果当前作用域没找到,到上级作用域找

3.如果上级作用域没有,接着向上找,至到全局作用域

4. 如果全局作用域也没有, 直接报错 Uncaught ReferenceError: num1 is not defined

<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>

作用域赋值规则

赋值前在当前作用域查找

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

上级作用域查找,至到全局作用域

当前作用域查找,上级作用域查找,全局作用域查找,全局作用域也没查找到,将创建全局变量,然后赋值

<script>
			var num = 100
			// var num3

			function fun1() {
				var num1 = 200  

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

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

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

作用域链

递归函数

 递归函数
           => 函数自身调用自身 这样的函数称为递归函数
           => 注意: 
                1. 递归结束的条件
                2. 改变递归条件的代码


递归函数作用

递归解决那些问题?
           后面结果由前面推导出来,可以采用递归简化实现

<script>
        // 1 + 2 + 3 求和
        function f(n){
            //结束条件
            if(n==1){
                return 1
            }
            return f(n-1) + n
        }

        var sum = f(3)


    </script>

递归实例

1 * 2 * 3 * 4 * 5  = ?
             分析:
                f(5)   
                   => f(4) * 5    ↑
                       => f(3) * 4      ↑
                           => f(2) * 3     ↑
                               => f(1) * 2  ↑
                                   1
                            f(n) = f(n-1) * n

 function f(n){
            if(n == 1){
                return 1
            }
            return f(n-1) * n
        }
        var m = f(4)
        console.log('前三项乘积',m)

对象

对象

            面向对象

            现实生活中对象

                具体一个事物

                张三同学

                对象有自己的特征行为

            软件世界

                对象 object

                属性 方法

        创建对象

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

            var jackObj = {

                name:'jack',   //姓名属性  name属性名和jack属性值构成

                age:18          //年龄属性  age属性名和18属性值构成

                sex:'男'       //性别属性

            }

        数据类型

            基本数据类型

                var num 100 /number

                var name 'jack'     //string

            复杂数据类型

                var obj {name:'jack',age:18}

            var obj {name:'jakc',age:18}

                obj 数据类型名->object

                创建对象new语句

                    字面量方式

                        var obj =

                        name:'jack',

                        age:18

                    构造函数方式

                        var obj=new object()//空对象

                        obj.name ='jack',

                        obj.age 18


 

            //创建一个姓名是jack,年龄是18岁,性别是男的对象

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

            //通过对象名访问对象属性对象名.属性名->属性值

 

<script>
        var obj = {
            name: 'jack',
            age: 18,
            sex: '男'
        }
        //访问对象给定属性的值
        console.log('name:', obj.name);
        console.log('age:', obj.age);
        console.log('sex:', obj.sex);

        //修改属性值
        obj.name = 'rose'
        obj.sex = '女'

        console.log(obj.name);

        console.log(obj)
        //删除属性
        // delete obj.name
        console.log(obj)
        //添加属性
        obj.score = 98
        console.log(obj)
        //遍历对象for-in
        for (var key in obj) {
            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>

创建一个名为student的学生对象,有属性学号num,性别sex,班级grade, 成绩score, 姓名name
 

<script>
        var student = {
            num:'001',
            sex:'男',
            grade:'2208班',
            score:100,
            name:'小明'
        }
        // console.log('name:',student.name);
        // console.log('sex:',student.sex);
        // console.log('grade:',student.grade);
        // console.log('score:',student.score);
        // console.log('num:',student.num);

        for(var key in student){
            console.log('student ', key, 'value', student[key])
        }

        student.city='上海'

        for(var key in student){
            console.log('student ', key, 'value', student[key])
        }
        delete student.num

        for(var key in student){
            console.log('student ', key, 'value', student[key])
        }

        student.city='成都'
        student.name="小红"
        student.sex='女'

        for(var key in student){
            console.log('student ', key, 'value', student[key])
        }

    </script>

数组

数组 Array
           数组
           1. 作用: 存储一系列有序数据的集合
           2. 创建数组
            var arr = []  //创建空数组
            var arr = [1,2,'jack',true]
                       0 1   2     4
           3. 索引号(下标)
           4. 访问数组元素
              arr[0]
           5. 数组长度 (元素个数)
               length属性
              arr.length 
           6. 遍历数组
               for

           7. 创建数组方式
              构造函数
                var arr = new Array()  空数组  
              字面量 
                var arr = []   空数组

<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. 构造函数创建数组
			var arr1 = new Array(100, 200, 300, 400, 500)
			for (var i = 0; i < arr1.length; i++) {
				console.log(arr1[i])
			}

			// 6. 创建数组只有一个元素, 表示创建一个空数组长度是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])
			}

            // 7. 直接控制台打印
            console.log(arr);

		</script>

数组练习题

<script>
			/*
                1. 创建一个学生成绩数组,存储所有学生的数学成绩,分别是 89,78,90,99,67,59
                2. 求所有学生中分数最高的学生成绩,打印输出到界面
                3. 求所有学生中分数最低学生成绩,打印输出到界面
                4. 求不及格的学生有几个,打印输出到界面
        */
			// 1. 创建一个学生成绩数组,存储所有学生的数学成绩,分别是 89,78,90,99,67,59
			var scoreArr = [89, 78, 90, 92, 47, 59, 98]
			// 2. 求所有学生中分数最高的学生成绩,打印输出到界面
			// 假设第一个数是最大值
			var max = scoreArr[0]
			// 依次让后面的数与最大值max比较,如果大于max,赋值给max

			// 从数组第二个元素开始循环遍历数组,进行求最大值比较
			for (var i = 1; i < scoreArr.length; i++) {
				if (scoreArr[i] > max) {
					max = scoreArr[i]
				}
			}

			console.log('最大值 ', max)

			/*
               4. 求不及格的学生有几个,打印输出到界面
               分析: 遍历学生成绩数组, 与60比较,如果小60不及格,计数器加一
            */
			var count = 0 //计数
			for (var i = 0; i < scoreArr.length; i++) {
				if (scoreArr[i] < 60) {
					count++
				}
			}
            console.log('不及格人数是 ',count)
		</script>

练习题2

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

          有一个存储两个数的数组[3,6]写程序交换数组元素,输出[6,3]
        */

			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])
				}
			}

			// 有一个存储两个数的数组[3,6]写程序交换数组元素,输出[6,3]
			function swap() {
				var arr1 = [3, 6]
				console.log(arr1) // arr1[0] :3  arr1[1]: 6
				var temp = arr1[0]
				arr1[0] = arr1[1]
				arr1[1] = temp
				console.log(arr1)
			}
            swap()
		</script>

页脚

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值