2019-05-26 js第四天

01乘法口诀表


      /*

        row = 1    for (var col = 1; col <= 9; col++)

        row = 2    for (var col = 1; col <= 8; col++)

        row = 3    for (var col = 1; col <= 7; col++)

        .....

        row = 9      for (var col = 1; col <= 1; col++)

      */

    var strStar = ''; // 保存 口诀表 的 字符串

    // 1.生成9行,并且 row 会逐一生成 行号

    for (var row = 1; row <= 9; row++) {

      //2. 内层循环:负责生成 每一行 里的 星星的个数(列数)

      for (var col = 1; col <= 10 - row; col++) {

        //strStar += '*\t';

        strStar += col + ' * ' + (10 - row) + ' = '+ ( col * (10 - row) )  +'\t';

      }

      //3. 加入换行符

      strStar += '\n';

    }

    //4. 循环结束后,打印乘法口诀表

    console.log(strStar);

02复兴循环

//1.循环

    /* 1.1 while循环

    如果 条件判断表达式 返回 的是 true,就会执行 if {} 大括号代码

    if(条件判断){

    }


    如果 条件判断表达式 返回 的是 true,就会执行 while{} 大括号里的代码

    然后 再来判断 条件判断表达式 返回 的是 true,如果是true,就会再次 执行 while{} 大括号里的代码

    然后 再来判断 ...................

    知道 最后一次判断 条件判断表达式 返回 的是 false,就结束循环,执行 while{} 后面的代码

    while(条件判断){

    }

    【while 执行顺序】

      1.先判断 while 的循环条件

                      如果 循环条件为 true,则执行循环体代码

                                            接着进入 下一次轮循环条件判断和代码执行,直到退出循环为止

                                    false,则退出循环

    【强调】 while (bool) 中 可以写几种代码:

                            a.直接写一个 bool值 

                            while(true){ 

                              if(a==10){

                                  break;

                              } 

                            }

                            b.直接写一个 bool值变量

                            var isCon = true;

                            while(isCon){

                              if(a==10){

                                isCon = false;

                              }

                            }

                            c.直接写一个 条件表达式 

                            var a = 1;

                            while(a < 10){

                              a = 10;

                            }

    【while 特点】 先判断后执行~~


    */

    /*

    1.2 do while 循环

                    和 while 循环 一抹一样,除了 执行顺序 有调整

      【do while特点】 先执行,再判断~~~

      【do while循环顺序】

                      1.先执行 循环代码,再判断 循环条件

                                              如果 循环条件为 true,则 进入下一次循环代码执行 和 判断,直到  循环条件为 false 退出循环为止

                                                              false,则立即退出循环

    */

    var a = 1;

    do {

      console.log('a= ' + a);

      a++; // a = a + 1

    } while (a <= 5);

    console.log('循环结束后:a=' + a);

    /*

    1.3 for 循环:能够比 while 和 dowhile 更好的 规范语法,防止 开发人员 遗漏 循环要素

        for(var i = 1; i < 10; i++){

        }

        【for 执行顺序:】

            一、第一轮循环 的顺序

              1.创建 循环变量

              2.判断 循环条件

              3.执行 循环体代码

              4.执行 循环条件改变 i++

          二、第二轮循环 和 后面每一轮的循环 的执行顺序

              2.判断 循环条件

              3.执行 循环体代码

              4.执行 循环条件改变 i++

    */

    //练习:计算 20-100 之间的 偶数 的平均值

    var sumNum = 0; // 保存所有偶数和

    var count = 0; // 循环的偶数的个数

    var avgNum = 0; // 平均值

    //生成 20 - 100 之间的整数

    for (var i = 20; i <= 100; i++) { // i = 20 21 22 ...... 99, 100

      //如果 i 是一个 偶数,那么 就累加 到 sumNum 变量中

      if (i % 2 == 0) {

        count++; // 累加 偶数 的个数

        sumNum += i; // sumNum = sumNum + i;

      }

    }

    avgNum = sumNum / count;

    console.log('20-100之间所有偶数和【' + sumNum + '】,偶数个数为【' + count + '】,平均值为【' + avgNum + '】');

/*  */

    //-----------------------------------------------------------------------------------------------------------

    console.log('-------------------------------------------------------------');

    //1.continue 退出本次循环

    //          准确的说 是 退出 本次循环的 代码 执行 阶段,进入下一个步,循环变量的修改

    //2.break 退出整个循环,并且 本次循环后面的代码 也不会执行了!!

    //        通俗的说:break结束循环,循环体代码全部都不执行了,包括 break后还没执行的 本次循环的代码

    for (var i = 1; i < 5; i++) {

      console.log('本次循环开始:i= ' + i);

      // if (i == 2) {

      //  console.log('i==2了,退出整个循环');

      //  break;

      // 

03数组初体验


// 变量的特点:一个变量只能保存一个数据

    var num = 1;

    console.log(num);

    // 【数组】

    //    本质:就是内存中 一连串的 空间

    //    特点:一次可以存放很多的数据

    // 【数组构成 三要素】:

    //                  元素 --- 数组中 存放的 数据

    //                  下标 --- 数组中 元素的 标识

    //                  length -- 数组中 所有 元素 的 个数

    //1.数组创建 并设置 初始值---------------

    // 12 2 3

    // true false

    // 'james'  '我爱华为'

    var arr = [1, true, ss , '小苍苍','小波波'];

    //        0    1        2    3

    //2.数组的访问---------------------------

    console.log(arr); // 打印 整个数组 数据

    //3.数组元素的访问------------------------

    console.log('arr[0] = ' + arr[0]); // 访问 数组中 下标 为 0 的元素

    console.log('arr[1] = ' + arr[1]); // 访问 数组中 下标 为 1 的元素

    console.log('arr[2] = ' + arr[2]); // 访问 数组中 下标 为 2 的元素

    //4.数组元素的个数 --- 数组的长度----------

    console.log('数组中的元素个数为:' + arr.length);

03数组创建方式

// 数组创建方式

    //1.new 的方式 -----------------------------------------

    //1.1 创建空数组

    var arr = new Array();

    //1.2 创建带 初始 长度 的 空数组

    var arr = new Array(3);

    //a. 访问 未赋值 的空间,得到 undefined

    console.log(arr[0]);

    //1.3 创建带 初始值 的数组

    var arr = new Array(1,2,'小苍苍');

    //2.字面量 [ ] 方式  --- 强烈推荐,用的最多  ------------------------------

    //2.1 创建空数组

    var arr = [];

    //2.2 创建 带 初始值的 数组

    var arr = [1, 2, '小苍'];

04设置和访问数组元素


//0. 创建了一个数组,里面有5 个元素

    var arrCity = ['P城', 'R城', 'G港', '学校', '靶场'];

    //              0      1      2    3      4      length = 5

    //1.访问 数组的 元素:  通过 数组名[下标]  访问  --------------------

    //1.1 直接 打印数组元素

    console.log(arrCity[0]); // 访问 arrCity数组的 第0个元素

    console.log(arrCity[1]); // 访问 arrCity数组的 第1个元素

    console.log(arrCity[2]); // 访问 arrCity数组的 第2个元素

    console.log(arrCity[3]); // 访问 arrCity数组的 第3个元素

    console.log(arrCity[4]); // 访问 arrCity数组的 第4个元素

    // 错误:arrCity(0)  不是通过小括号,是中括号!!!

    //1.2 将数组元素 复制一份 存入 变量

    var ele3 = arrCity[3];

    console.log(ele3);

    console.log(arrCity);

    //强调:访问 不存在的下标元素

    console.log('访问超出最大下标的元素:' + arrCity[5]);

    //2.设置 数组的 元素: 通过 数组名[下标] = 新的值 --------------------------

    //2.1 设置修改 已存在的下标里的元素

    arrCity[3] = '研究所';

    console.log(arrCity);

    //2.2 设置 超出 最大下标 的元素 ---- 相当于 向数组 中 加一个元素

    arrCity[5] = '军事基地';

    console.log(arrCity);

    //2.3 设置 超出 最大下标 很多 的元素  ---- 相当于 向数组 中加了多个元素,只不过中间的 都为 undefined

    arrCity[8] = 'Y城';

    console.log(arrCity);

    //2.4 访问 下标 为6 和 7 的元素

    console.log(arrCity[6]);

    console.log(arrCity[7]);

    console.log(arrCity[8]);

05数组的小尾巴

//0. 创建了一个数组,里面有5 个元素

    var arrCity = ['P城', 'R城', 'G港', '学校', '靶场'];

    //              0      1      2    3      4      length = 5

    //1. 通过 length 访问数组中 元素的个数

    console.log(arrCity.length);

    //2. 通过 length 来设置 数组 的 元素个数

    //2.1 通过 length 为 数组 增加 空的 元素

    arrCity.length = 7; // 因为 此时 数组 最大长度为 5,设置为7 的话,就是 向数组 添加了 3个 空元素

    console.log(arrCity);

    console.log(arrCity[5]); // undefined

    console.log(arrCity[6]); // undefined

    console.log(arrCity[7]); // undefined

    //2.2 通过 length 为数组 删减 元素

    arrCity.length = 3;

    console.log(arrCity);  // ['P城', 'R城', 'G港']

    //注意:如果 设置数组.length = 0,相当于 清空整个数组

06追加元素到数组

//0. 创建了一个数组,里面有5 个元素------------------------------------------------

    var arrCity = ['P城', 'R城', 'G港', '学校', '靶场'];

    //              0      1      2    3      4      length = 5

    //1. 数组名.push(新的值) 可以向数组 中添加 元素!--- 是从数组的 尾部追加元素

    arrCity.push('军事基地');

    arrCity.push('Z城');

    console.log(arrCity);

07删除数组元素

//0. 创建了一个数组,里面有5 个元素------------------------------------------------

    var arrCity = ['P城', 'R城', 'G港', '学校', '靶场'];

    //              0      1      2    3      4      length = 5

    //1.splice( index,count )删除 数组中 指定下标 的元素

    //            index -- 要删除的元素的开始下标

    //            count -- 要删除的元素的 个数

    arrCity.splice(3,1);

    console.log(arrCity);

    //2.splice 从指定下标开始,一直删除到最后一个元素

    //            index

    //            count  -- 如果 第二个参数 不传,则 代表 从  index 一直删到 结尾

    arrCity.splice(1); // 从 下标1 开始删除,一直 删到最后一个元素

    console.log(arrCity); //[ 'P城' ]

08遍历数组

// 业务:打印 数组里的每个元素,手动打印太麻烦~~

    // console.log(arrCity[0]);

    // console.log(arrCity[1]);

    // console.log(arrCity[2]);

    // console.log(arrCity[3]);

    // console.log(arrCity[4]);

    //0. 创建了一个数组,里面有5 个元素------------------------------------------------

    var arrCity = ['P城', 'R城', 'G港', '学校', '靶场'];

    //              0      1      2    3      4      length = 5

    // 【使用 for 循环 来 遍历 数组里的元素】

    //一、正序遍历 数组的元素 0 -> 最后一个下标  -----------------------------------------------

    //a. 正序遍历 的第1种方法 : i < arr.length

    // 1.通过 for循环 里的 i,依次生成 数组里元素的 下标

    for (var i = 0; i < arrCity.length; i++) { // i = 0 1 2 3 4

      // 2.通过 中括号访问法,访问 数组中 对应 i 下标 的元素,并打印出来!

      console.log(arrCity[i]);

    }

    //b. 正序遍历 的第2种方法 : i <= arr.length - 1

    for (var i = 0; i <= arrCity.length - 1; i++) { // i = 0 1 2 3 4

      console.log(arrCity[i]);

    }

    console.log('倒序遍历数组:');

    //二、倒序遍历 数组的元素 最后一个下标 -> 0 ---------------------------------------------------------

    for (var i = arrCity.length - 1; i >= 0; i--) { // i = 4 3 2 1 0

      console.log(arrCity[i]);

    }

09将 1 - 100 的数 追加到数组

//0. 将 1 - 100 的数 存入数组--------------------------------------

      //1.创建空数组

      var arrNum = [];

      //2.用 for 循环 生成 1 - 100 之间的数

      for(var i = 1; i<=100;i++){

        //3.将生成的 数 追加 到 数组中

        arrNum.push(i);

      }

      //4.打印数组

      console.log(arrNum); // [1,2,3,4,5,6........98,99,100]

10求数组最大值

// 1. 求数组最大值

    var arrNum = [99, 5, 2, 6, 77, 777, 222];

    //            0  1  2  3  4  5    6  length = 7

    //1.1 擂台思想:准备一个 擂台,里面 放 最大值

    var maxNum = arrNum[0]; // 将 要 比较 的 第一个值 存入 "擂台变量"

    //1.2 循环 遍历 取出 数组里 的元素,注意:从 下标 为 1 的元素开始取

    for(var i = 1; i < arrNum.length; i ++){

      //1.3 比较 当前 元素 和 maxNum 里的值 谁大

      if(arrNum[i] > maxNum){

        //1.4 如果 元素 大于 maxNum里的值,就 将 元素 设置给 maxNum变量  -- 比较强的 坐入王座

        maxNum = arrNum[i];

      }

    }

    console.log(maxNum);

// 1. 求数组最小值

    var arrNum = [99, 5, 2, 6, 77, 777, 222];

    //            0  1  2  3  4  5    6  length = 7

    //1.1 擂台思想:准备一个 擂台,里面 放 最小值

    var mixNum = arrNum[0]; // 将 要 比较 的 第一个值 存入 "擂台变量"

    //1.2 循环 遍历 取出 数组里 的元素,注意:从 下标 为 1 的元素开始取

    for(var i = 1; i < arrNum.length; i ++){

      //1.3 比较 当前 元素 和 mixNum 里的值 谁小

      if(arrNum[i] < mixNum){

        //1.4 如果 元素 小于 mixNum 里的值,就 将 元素 设置给 mixNum 变量  -- 比较弱的 坐入王座

        mixNum = arrNum[i];

      }

    }

    // 打印最小值

    console.log(mixNum);

11翻转数组

// 【题目】翻转数组

    //0. 创建了一个数组,里面有5 个元素------------------------------------------------

    var arrCity = ['P城', 'R城', 'G港', '学校', '靶场'];

    //              0      1      2    3      4      length = 5

    //1. 创建一个 空数组,用来保存 原数组的 翻转数据

    var arrNewCity = [ ];//['靶场', '学校', 'G港', 'R城', 'P城'];

    //2. 倒序遍历 原数组,并 从 后 往前 取出元素 ,追加到 新数组中

    for(var i = arrCity.length - 1; i >= 0 ; i--){ // i = 4 3 2 1 0 -1

      var ele =  arrCity[i];

      arrNewCity.push(ele);

    }

    //3.打印 新数组 和 原数组

    console.log('原数组:'+arrCity);

    console.log('新数组:'+arrNewCity);

    //4.将新数组 赋给 原数组

    arrCity = arrNewCity;


    console.log('翻转后的原数组:'+arrCity);

    // console.log('i=' + i);

12将数组元素拼接成字符串

//【题目】将数组元素拼接成字符串

    //0. 创建了一个数组,里面有5 个元素------------------------------------------------

    var arrCity = ['小苍苍', '小甜甜', '小狗狗', '小猫猫', '小泽泽'];

    //                0        1        2        3        4      length = 5

    //1. 准备一个 空字符串

    var str = ''; // 如果不设置,就是 undefined

    //2. 遍历元素,并将元素 追加到 字符串中

    for (var i = 0; i < arrCity.length; i++) {

      //3. 将 元素 拼接到 字符串中

      str += arrCity[i];  // 相当于  str += '小苍苍'  str += '小甜甜'    str += '小狗狗'  ................

      // 为 不是 最后一个元素 的情况 下 追加 字符 '-'

      if (i < arrCity.length - 1) {

        str += '-';

      }

    }

    //3. 打印字符串

    console.log(str);

13删除数组里的指定元素

//0. 创建了一个数组,里面有5 个元素------------------------------------------------

    var arrCity = ['小苍苍', '小甜甜', '小苍苍','小狗狗', '小猫猫', '小泽泽'];

    //                0        1        2        3        4      length = 5

    console.log(arrCity);

    // 1. 遍历 数组里的 元素,如果 找到 目标元素,就调用 splice 方法 删除

    for(var i = 0; i < arrCity.length;i++){

      //2. 如果 遍历的元素 等于 '小苍苍'

      if(arrCity[i]  == '小苍苍'){

        // 3. 调用 数组的 splice 方法 ,根据当前下标 ,删除 1个元素

        arrCity.splice(i,1);

      }

    }

    //4.打印 删除 目标元素 后的 数组

    console.log(arrCity);

14冒泡排序


// 冒泡排序

    // 1. 求数组最小值

    var arrNum = [5, 4, 3, 2, 1]; // -> [1,2,3,4,5]

    //            0  1  2  3  4 length = 5

    console.log('排序前:');

    console.log(arrNum);

    // 排序的过程,就是 不断 找 最大值的过程,两两相比,将 大的数字 和 小的数字 位置 进行 调换

    // 1.外层循环 负责 比较 轮数 控制: 轮数 = 数组元素个数 - 1

    for (var lun = 1; lun < arrNum.length; lun++) {

      console.log('第' + lun + '轮比较--------------------');

      // 2.内层循环 负责 比较的次数

      for (var i = 0; i < arrNum.length - lun; i++) {

        //console.log('第' + lun + '轮的 第 '+ i +'次比较--------------------');

        if (arrNum[i] > arrNum[i + 1]) {

          var temp = arrNum[i];

          arrNum[i] = arrNum[i + 1];

          arrNum[i + 1] = temp;

        }

        console.log(arrNum);

      }

    }

    // 一共 5个元素,比较 4轮            for(var i = 0 ;i < arr.length - lun;i++)

    // 第1轮 比较 4次        内层次数循环 for(var i = 0 ;i < 4;i++) // i = 0 1 2 3

    // 第2轮 比较 3次        内层次数循环 for(var i = 0 ;i < 3;i++) // i = 0 1 2

    // 第3轮 比较 2次        内层次数循环 for(var i = 0 ;i < 2;i++) // i = 0 1

    // 第4轮 比较 1次        内层次数循环 for(var i = 0 ;i < 1;i++) // i = 0

// 冒泡排序

    // 1. 求数组最小值

    var arrNum = [4, 3, 2, 1]; // -> [1,2,3,4]

    //            0  1  2  3 length = 4

    console.log('排序前:');

    console.log(arrNum);


    // 排序的过程,就是 不断 找 最大值的过程,两两相比,将 大的数字 和 小的数字 位置 进行 调换


    //第一轮比较:将 数组中 最大的值 放到了 最后面

    console.log('第1轮比较:将 数组中 最大的值 放到了 最后面--------------------');

    if(arrNum[0] > arrNum[1]){

      var temp = arrNum[0];  // temp = 4 ,  a[0] = 4 , a[1] = 3

      arrNum[0] = arrNum[1]; // temp = 4 ,  a[0] = 3 , a[1] = 3

      arrNum[1] = temp;      // temp = 4 ,  a[0] = 3 , a[1] = 4

    }

    console.log(arrNum);

    if(arrNum[1] > arrNum[2]){

      var temp = arrNum[1]; 

      arrNum[1] = arrNum[2];

      arrNum[2] = temp;   

    }

    console.log(arrNum);


    if(arrNum[2] > arrNum[3]){

      var temp = arrNum[2]; 

      arrNum[2] = arrNum[3];

      arrNum[3] = temp;   

    }

    console.log(arrNum);

    //第2轮比较:将 数组中 第二大的值 放到了 倒数第二个位置

    console.log('第2轮比较:将 数组中 第二大的值 放到了 倒数第二个位置--------------------');

    if(arrNum[0] > arrNum[1]){

      var temp = arrNum[0]; 

      arrNum[0] = arrNum[1];

      arrNum[1] = temp;     

    }

    console.log(arrNum);

    if(arrNum[1] > arrNum[2]){

      var temp = arrNum[1]; 

      arrNum[1] = arrNum[2];

      arrNum[2] = temp;   

    }

    console.log(arrNum);

    //第3轮比较:将 数组中 第3大的值 放到了 倒数第3个位置

    console.log('第3轮比较:将 数组中 第3大的值 放到了 倒数第3个位置--------------------');

    if(arrNum[0] > arrNum[1]){

      var temp = arrNum[0];

      arrNum[0] = arrNum[1];

      arrNum[1] = temp;   

    }

    console.log(arrNum);

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 简述JavaScript起源起源于美国的Netscape公司,原名为LiveScript,后改为JavaScrip...
    3ab670b99521阅读 2,996评论 0 0
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,744评论 2 17
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,028评论 0 2
  • 第五章******************************************************...
    fastwe阅读 678评论 0 0
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,063评论 1 10