zoukankan      html  css  js  c++  java
  • js数组与函数

    数组

    数组的使用

      <script>
            // 1.数组(Array) :就是一组数据的集合 存储在单个变量下的优雅方式 
            // 2. 利用new 创建数组
            var arr = new Array(); // 创建了一个空的数组
            // 3. 利用数组字面量创建数组 []
            var arr = []; // 创建了一个空的数组
            var arr1 = [1, 2, 'pink老师', true];
            // 4. 我们数组里面的数据一定用逗号分隔
            // 5. 数组里面的数据 比如1,2, 我们称为数组元素
            // 6. 获取数组元素  格式 数组名[索引号]  索引号从 0开始 
            console.log(arr1);
            console.log(arr1[2]); // pink老师
            console.log(arr1[3]); // true
            var arr2 = ['迪丽热巴', '古丽扎娜', '佟丽丫丫'];
            console.log(arr2[0]);
            console.log(arr2[1]);
            console.log(arr2[2]);
            console.log(arr2[3]); // 因为没有这个数组元素 所以输出的结果是 undefined
        </script>
    

    计算数组的和以及平均值

    <script>
            // 1. 求数组 [2,6,1,7, 4] 里面所有元素的和以及平均值。
            // (1)声明一个求和变量 sum。
            // (2)遍历这个数组,把里面每个数组元素加到 sum 里面。
            // (3)用求和变量 sum 除以数组的长度就可以得到数组的平均值。
            var arr = [2, 6, 1, 7, 4];
            var sum = 0;
            var average = 0;
            for (var i = 0; i < arr.length; i++) {
                sum += arr[i]; // 我们加的是数组元素 arr[i] 不是计数器 i
            }
            average = sum / arr.length;
            console.log(sum, average); // 想要输出多个变量,用逗号分隔即可
        </script>
    

    新增数组元素

      <script>
            // 1. 新增数组元素 修改length长度 
            var arr = ['red', 'green', 'blue'];
            console.log(arr.length);
            arr.length = 5; // 把我们数组的长度修改为了 5  里面应该有5个元素 
            console.log(arr);
            console.log(arr[3]); // undefined
            console.log(arr[4]); // undefined
    
            // 2. 新增数组元素 修改索引号 追加数组元素
            var arr1 = ['red', 'green', 'blue'];
            arr1[3] = 'pink';
            console.log(arr1);
            arr1[4] = 'hotpink';
            console.log(arr1);
            arr1[0] = 'yellow'; // 这里是替换原来的数组元素
            console.log(arr1);
            arr1 = '有点意思';
            console.log(arr1); // 不要直接给 数组名赋值 否则里面的数组元素都没有了
        </script>
    

    筛选数组

    <script>
          // 将数组 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中大于等于 10 的元素选出来,放入新数组。
          // 1、声明一个新的数组用于存放新数据newArr。
          // 2、遍历原来的旧数组, 找出大于等于 10 的元素。
          // 3、依次追加给新数组 newArr。
          // 方法1
          var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
          var newArr = [];
          var j = 0;
          for (var i = 0; i < arr.length; i++) {
              if (arr[i] >= 10) {
                  // 新数组索引号应该从0开始 依次递增
                  newArr[j] = arr[i];
                  j++;
              }
          }
          console.log(newArr);
          // 方法2 
          var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
          var newArr = [];
          // 刚开始 newArr.length 就是 0
          for (var i = 0; i < arr.length; i++) {
              if (arr[i] >= 10) {
                  // 新数组索引号应该从0开始 依次递增
                  newArr[newArr.length] = arr[i];
              }
          }
          console.log(newArr);
      </script>
    

    反转数组

    <script>
            // 将数组 ['red', 'green', 'blue', 'pink', 'purple'] 的内容反过来存放
            // 1、声明一个新数组 newArr
            // 2、把旧数组索引号第4个取过来(arr.length - 1),给新数组索引号第0个元素 (newArr.length)
            // 3、我们采取 递减的方式  i--
            var arr = ['red', 'green', 'blue', 'pink', 'purple', 'hotpink'];
            var newArr = [];
            for (var i = arr.length - 1; i >= 0; i--) {
                newArr[newArr.length] = arr[i]
            }
            console.log(newArr);
        </script>
    

    冒泡排序

     <script>
            // 冒泡排序
            // var arr = [5, 4, 3, 2, 1];
            var arr = [4, 1, 2, 3, 5];
            for (var i = 0; i <= arr.length - 1; i++) { // 外层循环管趟数 
                for (var j = 0; j <= arr.length - i - 1; j++) { // 里面的循环管 每一趟的交换次数
                    // 内部交换2个变量的值 前一个和后面一个数组元素相比较
                    if (arr[j] < arr[j + 1]) {
                        var temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
    
                }
            }
            console.log(arr);
        </script>
    

    函数

    函数使用

     <script>
            // 函数使用分为两步: 声明函数 和 调用函数
            // 1. 声明函数
            // function 函数名() {
            //     // 函数体
            // }
            function sayHi() {
                console.log('hi~~');
    
            }
            // (1) function 声明函数的关键字 全部小写
            // (2) 函数是做某件事情,函数名一般是动词 sayHi 
            // (3) 函数不调用自己不执行
            // 2. 调用函数
            // 函数名();
            sayHi();
            // 调用函数的时候千万不要忘记加小括号
        </script>
    

    带参函数

     <script>
            // 1. 函数可以重复相同的代码
            // function cook() {
            //     console.log('酸辣土豆丝');
    
            // }
            // cook();
            // cook();
            // 2. 我们可以利用函数的参数实现函数重复不同的代码
            // function 函数名(形参1,形参2...) { // 在声明函数的小括号里面是 形参 (形式上的参数)
    
            // }
            // 函数名(实参1,实参2...); // 在函数调用的小括号里面是实参(实际的参数)
            // 3. 形参和实参的执行过程
            function cook(aru) { // 形参是接受实参的  aru = '酸辣土豆丝' 形参类似于一个变量
                console.log(aru);
    
            }
            cook('酸辣土豆丝');
            cook('大肘子');
            // 4. 函数的参数可以有,也可以没有个数不限
        </script>
    
     <script>
            // 1. 利用函数求任意两个数的和
            function getSum(num1, num2) {
                console.log(num1 + num2);
    
            }
            getSum(1, 3);
            getSum(3, 8);
            // 2. 利用函数求任意两个数之间的和
            function getSums(start, end) {
                var sum = 0;
                for (var i = start; i <= end; i++) {
                    sum += i;
                }
                console.log(sum);
    
            }
            getSums(1, 100);
            getSums(1, 10);
            // 3. 注意点
            // (1) 多个参数之间用逗号隔开
            // (2) 形参可以看做是不用声明的变量
        </script>
    

    函数形参实参个数匹配

      <script>
            // 函数形参实参个数匹配
            function getSum(num1, num2) {
                console.log(num1 + num2);
    
            }
            // 1. 如果实参的个数和形参的个数一致 则正常输出结果
            getSum(1, 2);
            // 2. 如果实参的个数多于形参的个数  会取到形参的个数 
            getSum(1, 2, 3);
            // 3. 如果实参的个数小于形参的个数  多于的形参定义为undefined  最终的结果就是 NaN
            // 形参可以看做是不用声明的变量  num2 是一个变量但是没有接受值  结果就是undefined 
            getSum(1); // NaN
            // 建议 我们尽量让实参的个数和形参相匹配
        </script>
    

    函数的返回值

      <script>
          // 1.函数是做某件事或者实现某种功能
          // function cook(aru) {
          //     console.log(aru);
    
          // }
          // cook('大肘子');
          // 2. 函数的返回值格式
          // function 函数名() {
          //     return 需要返回的结果;
          // }
          // 函数名();
          // (1) 我们函数只是实现某种功能,最终的结果需要返回给函数的调用者函数名() 通过return 实现的
          // (2) 只要函数遇到return 就把后面的结果 返回给函数的调用者  函数名() = return后面的结果
          // 3. 代码验证
          function getResult() {
              return 666;
          }
          getResult(); // getResult()   = 666
          console.log(getResult());
    
          // function cook(aru) {
          //     return aru;
          // }
          // console.log(cook('大肘子'));
          // 4. 求任意两个数的和
          function getSum(num1, num2) {
              return num1 + num2;
          }
          console.log(getSum(1, 2));
      </script>
    
      <script>
            // 函数返回值注意事项
            // 1. return 终止函数
            function getSum(num1, num2) {
                return num1 + num2; // return 后面的代码不会被执行
                alert('我是不会被执行的哦!')
            }
            console.log(getSum(1, 2));
            // 2. return 只能返回一个值
            function fn(num1, num2) {
                return num1, num2; // 返回的结果是最后一个值
            }
            console.log(fn(1, 2));
    
            // 3.  我们求任意两个数的 加减乘数结果
            function getResult(num1, num2) {
                return [num1 + num2, num1 - num2, num1 * num2, num1 / num2];
            }
            var re = getResult(1, 2); // 返回的是一个数组
            console.log(re);
            // 4. 我们的函数如果有return 则返回的是 return 后面的值,如果函数么有 return 则返回undefined
            function fun1() {
                return 666;
            }
            console.log(fun1()); // 返回 666
            function fun2() {
    
            }
            console.log(fun2()); // 函数返回的结果是 undefined
        </script>
    

    arguments 的使用

    <script>
            // arguments 的使用  只有函数才有 arguments对象  而且是每个函数都内置好了这个arguments
            function fn() {
                // console.log(arguments); // 里面存储了所有传递过来的实参  arguments = [1,2,3]
                // console.log(arguments.length);
                // console.log(arguments[2]);
                // 我们可以按照数组的方式遍历arguments
                for (var i = 0; i < arguments.length; i++) {
                    console.log(arguments[i]);
    
                }
            }
            fn(1, 2, 3);
            fn(1, 2, 3, 4, 5);
            // 伪数组 并不是真正意义上的数组
            // 1. 具有数组的 length 属性
            // 2. 按照索引的方式进行存储的
            // 3. 它没有真正数组的一些方法 pop()  push() 等等
        </script>
    

    利用函数求任意个数的最大值

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

    函数互相调用

        <script>
            // 函数是可以相互调用的
            // function fn1() {
            //     console.log(11);
            //     fn2(); // 在fn1 函数里面调用了 fn2 函数
            // }
            // fn1();
    
            // function fn2() {
            //     console.log(22);
    
            // }
    
            function fn1() {
                console.log(111);
                fn2();
                console.log('fn1');
            }
    
            function fn2() {
                console.log(222);
                console.log('fn2');
            }
            fn1();
        </script>
    

    函数的两种声明方式

    <script>
            // 函数的两种声明方式
            // 1. 利用函数关键字自定义函数(命名函数)
            function fn() {
    
            }
            fn();
            // 2. 函数表达式(匿名函数) 
            // var 变量名 = function() {};
            var fun = function(aru) {
                console.log('我是函数表达式');
                console.log(aru);
    
            }
            fun('pink老师');
            // (1) fun是变量名 不是函数名  
            // (2) 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值 而 函数表达式里面存的是函数
            // (3) 函数表达式也可以进行传递参数
        </script>
    

    JavaScript作用域

    <script>
          // 1.JavaScript作用域 : 就是代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性更重要的是减少命名冲突
          // 2. js的作用域(es6)之前 : 全局作用域   局部作用域 
          // 3. 全局作用域: 整个script标签 或者是一个单独的js文件
          var num = 10;
          var num = 30;
          console.log(num);
    
          // 4. 局部作用域(函数作用域) 在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用
          function fn() {
              // 局部作用域
              var num = 20;
              console.log(num);
    
          }
          fn();
      </script>
    

    变量的作用域

     <script>
            // 变量的作用域: 根据作用域的不同我们变量分为全局变量和局部变量
            // 1. 全局变量: 在全局作用域下的变量 在全局下都可以使用
            // 注意 如果在函数内部 没有声明直接赋值的变量也属于全局变量
            var num = 10; // num就是一个全局变量
            console.log(num);
    
            function fn() {
                console.log(num);
    
            }
            fn();
            // console.log(aru);
    
            // 2. 局部变量   在局部作用域下的变量   后者在函数内部的变量就是 局部变量
            // 注意: 函数的形参也可以看做是局部变量
            function fun(aru) {
                var num1 = 10; // num1就是局部变量 只能在函数内部使用
                num2 = 20;
            }
            fun();
            // console.log(num1);
            // console.log(num2);
            // 3. 从执行效率来看全局变量和局部变量
            // (1) 全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
            // (2) 局部变量 当我们程序执行完毕就会销毁, 比较节约内存资源
        </script>
    

    js中没有块级作用域

    <script>
            // js中没有块级作用域  js的作用域: 全局作用域  局部作用域  现阶段我们js 没有 块级作用域
            // 我们js 也是在 es6 的时候新增的块级作用域
            // 块级作用域 {}   if {}  for {}
            // java 
            // if(xx) {
            //     int num = 10;
            // }
            // 外面的是不能调用num的
            if (3 < 5) {
                var num = 10;
            }
            console.log(num);
        </script>
    

    作用域链

       <script>
            // 作用域链  : 内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值 这种结构我们称为作用域链   就近原则
            var num = 10;
    
            function fn() { // 外部函数
                var num = 20;
                function fun() { // 内部函数
                    console.log(num);
                }
                fun();
            }
            fn();//20
        </script>
    
    <script>
            // 案例1 : 结果是几?
            function f1() {
                var num = 123;
    
                function f2() {
                    var num = 0;
                    console.log(num); // 站在目标出发,一层一层的往外查找  0
                }
                f2();
            }
            var num = 456;
            f1();
            // 案例2 :结果是几?
            var a = 1;
    
            function fn1() {
                var a = 2;
                var b = '22';
                fn2();
    
                function fn2() {
                    var a = 3;
                    fn3();
    
                    function fn3() {
                        var a = 4;
                        console.log(a); //a的值 ?  4
                        console.log(b); //b的值 ?  22
                    }
                }
            }
            fn1();
        </script>
    

    预解析

     <script>
            // 1问  
            // console.log(num);//undefined
            // 2问
            console.log(num); // undefined  坑 1
            var num = 10;
            // 相当于执行了以下代码
            // var num;
            // console.log(num);
            // num = 10;
    
            // 3问  
            function fn() {
                console.log(11);
            }
            fn();
    
            // 4问
            fun(); // 报错  坑2 
            var fun = function() {
                    console.log(22);
    
                }
                // 函数表达式 调用必须写在函数表达式的下面
                // 相当于执行了以下代码
                // var fun;
                // fun();
                // fun = function() {
                //         console.log(22);
    
            //     }
    
            // 1. 我们js引擎运行js 分为两步:  预解析  代码执行
            // (1). 预解析 js引擎会把js 里面所有的 var  还有 function 提升到当前作用域的最前面
            // (2). 代码执行  按照代码书写的顺序从上往下执行
            // 2. 预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)
            // (1) 变量提升 就是把所有的变量声明提升到当前的作用域最前面  不提升赋值操作
            // (2) 函数提升 就是把所有的函数声明提升到当前作用域的最前面  不调用函数
        </script>
    

    案例

     <script>
            // 预解析案例
            // 案例1
            // var num = 10;
            // fun();
            //
            // function fun() {
            //     console.log(num);
            //     var num = 20;
            // }
            // // 相当于执行了以下操作
            // // var num;
    
            // // function fun() {
            // //     var num;
            // //     console.log(num);
            // //     num = 20;
            // // }
            // // num = 10;
            // // fun();
            // // 案例2
            // var num = 10;
            //
            // function fn() {
            //     console.log(num);
            //     var num = 20;
            //     console.log(num);
            // }
            // fn();
            // // 相当于以下代码
            // // var num;
    
            // // function fn() {
            // //     var num;
            // //     console.log(num);
            // //     num = 20;
            // //     console.log(num);
            // // }
            // // num = 10;
            // // fn();
            // // 案例3
            // var a = 18;
            // f1();
            //
            // function f1() {
            //     var b = 9;
            //     console.log(a);
            //     console.log(b);
            //     var a = '123';
            // }
            // 相当于以下代码
            // var a;
    
            // function f1() {
            //     var b;
            //     var a;
            //     b = 9;
            //     console.log(a);
            //     console.log(b);
            //     a = '123';
            // }
            // a = 18;
            // f1();
            // 案例4
            f1();
            console.log(c);
            console.log(b);
            console.log(a);
    
            function f1() {
                var a = b = c = 9;
                console.log(a);
                console.log(b);
                console.log(c);
            }
            // 以下代码
            // function f1() {
            //     var a;
            //     a = b = c = 9;
            //     // 相当于 var  a  = 9; b = 9; c = 9; b 和 c 直接赋值 没有var 声明 当 全局变量看
            //     // 集体声明  var a = 9, b = 9, c = 9;
            //     console.log(a);
            //     console.log(b);
            //     console.log(c);
            // }
            // f1();
            // console.log(c);
            // console.log(b);
            // console.log(a);
    
        </script>
    

    利用对象字面量创建对象

      <script>
            // 1.利用对象字面量创建对象 {}
            // var obj = {};  // 创建了一个空的对象 
            var obj = {
                    uname: '张三疯',
                    age: 18,
                    sex: '男',
                    sayHi: function() {
                        console.log('hi~');
    
                    }
                }
                // (1) 里面的属性或者方法我们采取键值对的形式  键 属性名 : 值  属性值 
                // (2) 多个属性或者方法中间用逗号隔开的
                // (3) 方法冒号后面跟的是一个匿名函数
                // 2. 使用对象
                // (1). 调用对象的属性 我们采取 对象名.属性名 . 我们理解为 的
            console.log(obj.uname);
            // (2). 调用属性还有一种方法 对象名['属性名']
            console.log(obj['age']);
            // (3) 调用对象的方法 sayHi   对象名.方法名() 千万别忘记添加小括号
            obj.sayHi();
        </script>
    

    利用 new Object 创建对象

     <script>
            // 利用 new Object 创建对象
            var obj = new Object(); // 创建了一个空的对象
            obj.uname = '张三疯';
            obj.age = 18;
            obj.sex = '男';
            obj.sayHi = function() {
                    console.log('hi~');
    
                }
                // (1) 我们是利用 等号 = 赋值的方法 添加对象的属性和方法
                // (2) 每个属性和方法之间用 分号结束
            console.log(obj.uname);
            console.log(obj['sex']);
            obj.sayHi();
        </script>
    

    利用构造函数创建对象

    <script>
         // 利用构造函数创建对象
         // 我们需要创建四大天王的对象  相同的属性: 名字 年龄 性别  相同的方法: 唱歌
         // 构造函数的语法格式
         // function 构造函数名() {
         //     this.属性 = 值;
         //     this.方法 = function() {}
         // }
         // new 构造函数名();
         function Star(uname, age, sex) {
             this.name = uname;
             this.age = age;
             this.sex = sex;
             this.sing = function(sang) {
                 console.log(sang);
    
             }
         }
         var ldh = new Star('刘德华', 18, '男'); // 调用函数返回的是一个对象
         // console.log(typeof ldh);
         console.log(ldh.name);
         console.log(ldh['sex']);
         ldh.sing('冰雨');
         var zxy = new Star('张学友', 19, '男');
         console.log(zxy.name);
         console.log(zxy.age);
         zxy.sing('李香兰')
    
    
    
         // 1. 构造函数名字首字母要大写
         // 2. 我们构造函数不需要return 就可以返回结果
         // 3. 我们调用构造函数 必须使用 new
         // 4. 我们只要new Star() 调用函数就创建一个对象 ldh  {}
         // 5. 我们的属性和方法前面必须添加 this
     </script>
    
    <script>
           // new关键字执行过程
            // 1. new 构造函数可以在内存中创建了一个空的对象 
            // 2. this 就会指向刚才创建的空对象
            // 3. 执行构造函数里面的代码 给这个空对象添加属性和方法
            // 4. 返回这个对象
    
            // 构造函数和对象
            // 1. 构造函数  明星 泛指的某一大类  它类似于 java 语言里面的  类(class)
            function Star(uname, age, sex) {
                this.name = uname;
                this.age = age;
                this.sex = sex;
                this.sing = function(sang) {
                    console.log(sang);
    
                }
            }
            // 2. 对象 特指 是一个具体的事物 刘德华 ==  {name: "刘德华", age: 18, sex: "男", sing: ƒ}
            var ldh = new Star('刘德华', 18, '男'); // 调用函数返回的是一个对象
            console.log(ldh);
            // 3. 我们利用构造函数创建对象的过程我们也称为对象的实例化
        </script>
    

    遍历对象

     <script>
            // 遍历对象 
            var obj = {
                    name: 'pink老师',
                    age: 18,
                    sex: '男',
                    fn: function() {}
                }
                // console.log(obj.name);
                // console.log(obj.age);
                // console.log(obj.sex);
                // for in 遍历我们的对象
                // for (变量 in 对象) {
    
            // }
            for (var k in obj) {
                console.log(k); // k 变量 输出  得到的是 属性名
                console.log(obj[k]); // obj[k] 得到是 属性值
    
            }
            // 我们使用 for in 里面的变量 我们喜欢写 k  或者  key
        </script>
    
  • 相关阅读:
    超线程、多核、多处理器
    视图
    面试题27:连续子数组的最大和
    Java实现 蓝桥杯油漆问题
    Java实现 蓝桥杯油漆问题
    Java实现 蓝桥杯油漆问题
    Java实现 蓝桥杯油漆问题
    Java实现第七届蓝桥杯国赛 赢球票
    Java实现第七届蓝桥杯国赛 赢球票
    Java实现第七届蓝桥杯国赛 赢球票
  • 原文地址:https://www.cnblogs.com/fly-book/p/12105931.html
Copyright © 2011-2022 走看看