JS---函数 (作用域)、递归、对象

作用域:变量起作用的范围称为作用域。

var nm=100
function fn()
{    
    //局部作用域
    var num1=200
}

作用域分为全局作用域和局部作用域

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

全局作用域:在整个JS代码起作用

内层可以访问外层作用域变量,外层不可访问内层作用域范围变量!!

 <script>
        var num = 100
        function fun1() {
            var num1 = 200
            console.log('fun1 num ', num)

            function fun2() {
             var num2 = 300
             console.log('fun2 num ', num)//如果上级作用域没有,接着向上找,直到全局作用域,
             console.log('fun2 num ', num1)//如果当前作用域没找到,到上级作用域找
             console.log('fun2 num ', num2)//当前作用域
             console.log(num3)//如果全局作用域也没有,直接报错
                
                }
                fun2()
            }
            fun1()
        
    </script>

 赋值规则:

 var num = 100
        function fun1() {
            var num1 = 200

            function fun2() {
                var num2 = 300
                num1 = 400
                num = 500
                num3 = 600  //当前作用域查找,上级作用域查找,全局作用域查找,都没找到,将创建全局变量,然后赋值

            }
            fun2()
        }

 作用域链:

变量访问或赋值时,先在自己的作用域查找,如果没有找到,再一层一层向上查找,到最外层作用域。这种层层查找关系,叫作作用域!

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

注意哦,要有递归结束的条件!还要改变递归条件!!

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

例如求1+2+3的和:

function f(n){
    if(n==1){
    return 1
    }
returnf(n-1)+n
   }
var sum=f(3)
 console.log(sum)

 例如求1*2*3*4*5的积:

 function f(n) {
            if (n == 1) {
                return 1
            }
            return f(n-1) * n
        }
        var sum = f(5)
        console.log(sum)

对象:

现实生活中对象,具体的一个事物称对象;每个对象有自己的特征行为。

在软件世界上,同样有对象,用object表示,行为:属性 ;特征:方法。

创建对象
(有字面创建和new语句 构造函数创建对象,下面为字面创建)

    var jackObj={ }   / / 创建对象

    var jackObj={ name:'jack',    //姓名属性 name属性名和jack属性值构成
                  age:18         //年龄属性 age属性名和18属性值构成
                }  
 <script>
        //1创建一个姓名为rc,年龄18,姓别女的对象
        //obj称为对象,可以叫引用变量
        //通过对象名访问对象属性,对象名,属性名-->属性值
        var obj={
            name:'rc',
            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)

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

        //7访问属性值,属性名是变量情况,我们需要写中括号!
        console.log('name ',obj.name);
        var_name='name'
        console.log(obj[_name])


    </script>

基础数据类型有五种,而我们创建的对象属于复杂数据类型里面的对象数据类型!创建键值对的组合!

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


        var student={
            name:'zs',
            num:1910,
            sex:'男',
            grade:'h5',
            score:80
        }
        //访问
        console.log('name',student.name);
        console.log('num',student.num);
        console.log('sex',student.sex);
        console.log('grade',student.grade);
        console.log('score',student.score);

        //添加属性
        student.hoby='play'
        console.log(student)
        

        //遍历
        for(var key in student){
            console.log('key',key,'value',student[key])
            console.log(key)
        }
    </script>

用new语句创建对象(构造函数)

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

数组的基础知识: 

 // 数组 Array 
            // 1:作用存储一系列有序数据的集合

            // 2:创建数组
            // var arr=[ ] 创建一个空数组
            // var arr=[ 1,2,34,true,'jack']

            // 3.索引号

            // 4.访问数组元素
            //     arr[0]

            // 5.数组长度(元素个数)
            // lenght 属性
            // arr.lenght
            
            // 6.遍历数组

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




            // 1.创建数组
         var arr=[10,20,30,40]

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

            //3.数组长度(元素个数)
            console.log('lenght>>:',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  lenght=5
               var arr2=new Array
               console.log('arr2.lenght>>>>',arr2.length)
               for(var i=0;i<=arr2.length;i++){
                console.log(arr2[i])
               }

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

数组例题:

    <script>


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

        //求所有学生的最高分并输出在界面
        //假设第一数为最高分
        var max = scoreArr[0]

        //依次与后面的分数相比,如果大于max,就赋值给max
        for (var i = 1; i < scoreArr.length; i++) {
            if (scoreArr[i] > max) {
                max = scoreArr[i]
            }
        }
        console.log('最大值',max)

        // if(scoreArr[1]>max){
        //     max=scoreArr[1]
        // }
        // if(scoreArr[2]>max){
        //     max=scoreArr[2]
        // }
        // if(scoreArr[3]>max){
        //     max=scoreArr[3]
        // }
        // if(scoreArr[4]>max){
        //     max=scoreArr[4]
        // }
        // if(scoreArr[5]>max){
        //     max=scoreArr[5]
        // }
        // console.log('最大值',max)


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

    </script>

若有不正确的地方,敬请指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值