2019-05-29 js第五天

复习第四天

  //1.day01 --  变量、数据类型

    //            输入  :var usrInput =  prompt('消息内容'); --> 返回的都是字符串

    //                    var usrChoose = confirm('消息内容'); --> 返回的true/false

    //                    document.write('<script src="1.js"><\/script>') 

    //          输出  : console.log('输出内容');  --> 程序员用

    //                  alert('用户消息');  --> 给页面浏览者看的

    //2.day02 -- if else 条件判断  switch case  --> if(a === 1)

    //          显示类型转换:

    //                    转数值: parseInt()  parseFloat()  Number()  ,        +('') -> 0    parseInt('') -> NaN

    //                    转字符串: 变量.toString()    String() -- null和 undefined 没有toString() ,会报错!

    //                    转布尔值: Boolean()

    //                                    转成false  : 0  -0  NaN  ''  false  undefined null document.all

    //                                    转成true

    //3.day03 -- 循环 : 凡是 不依赖与 循环次数,都用 while 或 do while

    //                  while      先奏后斩  - 先判断 循环条件是否成立,如果成立,则执行循环体代码,否则,直接退出循环

    //                  do while    先占后奏  - 先执行1次循环体代码,然后再判断循环条件,看要不要执行下一次循环

    //                  for  --- 有指定循环次数 时 使用!

    //                          用来 按照次数循环 for(var i = 1; i<=10;i++){ }

    //                          用来 生成数字    for(var i = 20; i<= 80;i++){ }

    //                          用来 生成 数组 的 下标  for(var i = 0; i < arr.length;i++){ }

    //                  continue -- 退出本次循环 --》跳到 i++

    //                  break    -- 退出整个循环

    //4.day04  -- 数组:

    //                var arr = [1 , 2 , 3 , 'a' , true];

    //                          0  1  2    3      4    ,  length = 5

    //            数组三要素:  元素,下标,length

    //            追加元素:arr.push('暴雨为何还不来~~!');  // -> [1 , 2 , 3 , 'a' , true, '暴雨为何还不来~~!']

    //            删除元素:arr.splice(index,count)

    //            修改元素:arr[1] = 'love'; // -> [1 , 'love' , 3 , 'a' , true, '暴雨为何还不来~~!']

    //            清空数组:arr.length = 0; // -> [ ]

    //            遍历数组

    var arr = [1, 2, 3, 'a', true];

    //        0  1  2  3    4    ,  length = 5

    // 正序遍历

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

      console.log(arr[i]);

    }

    // 倒序遍历

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

      console.log(arr[i]);

    }

01函数

// 本质上说,变量 就是 一个 内存空间

    // 通俗的说, 变量 就是 一个 盒子,里面只能装一个数据

    var a = '苹果';

    a = '梨子';

    // 数组

    // 本质上说,数组 就是 一连串 的空间

    // 通俗的说, 数组 就是 一连串 的盒子,可以装好多数据

    var arrFruit = ['苹果', '梨子', '葡萄', '香蕉', '芒果'];

    // ------------------------------------------函数 ----------------------------------------------

    // 本质上说,函数 就时 一个 装了 代码 的 内存空间

    // 1.【函数声明】: 创建 装了 代码的 “盒子”,盒子里的代码 此时 不会 执行

    //    function 函数关键字

    //    showLove 函数名

    //    ()      形参列表

    //    { }      函数体


    function showLove(){

      var num = 10;

      num += 100;

      console.log('ruiky,我爱你 ~~~~');

      console.log('隔壁老周,讨厌~~~' + num);

    }

    // 2.【函数调用】:执行 函数"盒子" 里的代码!! 

    //  语法: 函数名();

    //  当 函数中的代码 执行 完成后,JS引擎就调到 函数 调用 后面的代码执行

    showLove();

    console.log('函数调用结束了~~~~');

    // 3.【为什么要有函数】:函数 可以用来 将 经常 会被调用 的 一段 代码 封装起来, 重复调用 !-------------

    //      【函数的功能】 :封装、复用代码

    // 3.1【函数的参数】:

    //            形参-》声明函数时,小括号中 可以 添加 【形参变量】,用来 接收 函数调用时 传入的 值

    //                  形参的本质,就是 函数的 局部变量,只能在函数内部访问和使用

    //            实参-》调用函数时,小括号中 可以 添加 【实参值】,实参值 会被 “传给” 被调用函数的 【形参变量】

    // // ---------------------------------------大宝剑函数 ---------------------------------

    // function bigSword(jiShiId){ //var jiShiId;

    //  console.log('------------欢迎来到快乐岛盲人按摩健康会所------------');

    //  console.log('交钱:1888~~~');

    //  console.log('选择盲人技师 '+ jiShiId +' 号 ~~');

    //  console.log('天黑请闭眼~~正规盲人按摩开始~~');

    //  console.log('正规按摩结束,先生请喝一杯可乐~~~');

    // }

    // console.log('坤哥起床了,觉得精神不好,要去 大宝剑~~~~');

    // bigSword(999); // 实参 999 ,被传给 形参 jiShiId

    // console.log('坤哥中午下班了,觉得有点累,要去 大宝剑~~~');

    // bigSword(68);

    // console.log('坤哥晚上回家了,老婆说他回来太晚,不让进门,坤哥很郁闷,就去 大宝剑~~~');

    // bigSword(69);

    //3.2 如果 没有 为 形参 赋值,那么 形参默认值 为 undefined

    // bigSword(); //

    // ---------------------------------------大宝剑函数 ---------------------------------

    //4.【函数的形参】 可以 有多个,中间用 逗号隔开~~~


    function bigSword(jiShiId,yinLiao){ //var jiShiId;

      console.log('------------欢迎来到快乐岛盲人按摩健康会所------------');

      console.log('交钱:1888~~~');

      console.log('选择盲人技师 '+ jiShiId +' 号 ~~');

      console.log('天黑请闭眼~~正规盲人按摩开始~~');

      console.log('正规按摩结束,先生请喝一杯' + yinLiao + '~~~');

    }

    console.log('坤哥起床了,觉得精神不好,要去 大宝剑~~~~');

    //4.2【函数实参】因为 形参 有 两个,所以 实参 也可以传递 2个 给 对应的形参

    // 传参规则:按照 实参 和 形参 的 对应顺序 依次赋值

    bigSword(999,'牛奶'); // 实参 999 ,被传给 形参 jiShiId

    // console.log('坤哥中午下班了,觉得有点累,要去 大宝剑~~~');

    // bigSword(68,'咖啡');

    // console.log('坤哥晚上回家了,老婆说他回来太晚,不让进门,坤哥很郁闷,就去 大宝剑~~~');

    // bigSword(69,'汇源肾宝');

02函数形参的默认值

//【函数形参 的默认值】: 当 调用函数时,没有传入实参时,形参 会有一个 默认的值

    //1.方式一:使用 || 运算符 的 短路 操作

    function bigSword1(jiShiId, yinLiao) { //var jiShiId;

      // 如果 jiShiId 没有实参值,默认 是 undefined,也就是说,调用函数时,没有实参传入

      //1.1 通过 if 来 模式 设置 默认值        ------------------------

      // if(jiShiId == undefined){

      //  // 所以 设置 jiShiId 的默认值为 77

      //  jiShiId = 77;

      // }

      // if(yinLiao== undefined){

      //  yinLiao = '可乐';

      // }

      //1.2 通过 三元运算符 来 模式 设置 默认值    ------------------------

      // jiShiId = jiShiId == undefined ? 77: jiShiId;

      // yinLiao = yinLiao == undefined ? '可乐': yinLiao;

      // if ()中的值 如果 直接是  0 -0 NaN null undefined '' ,相当于 if(false){ }

      // if(!jiShiId){

      //  jiShiId = 77;

      // }

      //1.3 通过 逻辑或 短路来 模拟 设置默认值      ------------------------

      //    形参 =  形参 || 默认值;

      // jiShiId = jiShiId || 77;

      // yinLiao = yinLiao || '牛奶';

      console.log('------------欢迎来到快乐岛盲人按摩健康会所------------');

      console.log('交钱:1888~~~');

      console.log('选择盲人技师 ' + jiShiId + ' 号 ~~');

      console.log('天黑请闭眼~~正规盲人按摩开始~~');

      console.log('正规按摩结束,先生请喝一杯' + yinLiao + '~~~');

    }

    //4.方式四:使用 es6 语法 设置默认值

    function bigSword(jiShiId = 77, yinLiao='牛奶') {

      console.log('------------欢迎来到快乐岛盲人按摩健康会所------------');

      console.log('交钱:1888~~~');

      console.log('选择盲人技师 ' + jiShiId + ' 号 ~~');

      console.log('天黑请闭眼~~正规盲人按摩开始~~');

      console.log('正规按摩结束,先生请喝一杯' + yinLiao + '~~~');

    }

    //调用函数:没有传实参

    bigSword();

    //调用函数:传递了实参

    bigSword(29,'肾宝');

03函数的返回值

//1. 函数 的作用 : 封装代码 , 复用代码

      //2. 函数 的参数 : 函数声明时的【形参】,函数调用时的【实参】

      //3. 函数 的形参的默认值: es6语法,在小括号中直接为 形参设置 默认值

      //4. 函数 的返回值 :在函数 内部 使用 return 关键字 可以 将一个值 返回 给 函数的调用者

      // 调用函数 的目的 :

      //              a.执行一段 封装在 函数内部的 代码 ,比如说 bigSword函数,就是单纯的为 了 执行一遍 大宝剑的业务代码

      //              b.执行一段 封装在 函数内部的 代码,并且 获取 一个 执行的 结果,比如说 求 随机数 Math.random() ,执行后 会返回一个 随机数

      function add(x,y){

        var res = x + y;

        return res; // 在函数内部 将一个 值 返回给 函数的调用者

        console.log('我是 retrun后面的代码,永远都不会被执行!!!');

      }

      var numX = add(1,2); // 相当于 : var numX = 3;

      console.log(numX);

      // 如果 函数中 不使用 return ,那 有没有返回值?

      //4.1【所有函数中如果 不使用 return 来返回一个值的话,默认 都返回 undefined~~!】

      function showLove(){

        console.log('cai lan hei ~~~~');

      }

      var a = showLove();

      console.log(a);


      //4.2 return 跳出 当前函数!!!

      function showLove(){

        console.log('我爱你~~');

        console.log('i love u ~~');

        return; // return undefined;

        console.log('cai lan hei ~~');

        console.log('a yi xi te nu ~~');

      }

      showLove();

      console.log('showLove 参数执行完毕');

04 js预解析和函数变量提升

// console.log(b); // 报错: b is not defined

      //【js引擎 会 先 做 预解析,然后再 由上到下 的执行代码】

      // 1. JS预解析

      //    1.1 将 所有 声明的变量 提到 所在作用域的 最顶端

      //    1.2 将 所有 声明的函数 提到 所在作用域的 最顶端

      //    注意:提升后,变量 在 函数 之前

      //1.1 将 所有 声明的变量 提到 所在作用域的 最顶端----------

      console.log(a); // undefined

      var a = 1;

      console.log(a); // 1

      //1.2 将 所有 声明的函数 提到 所在作用域的 最顶端-------------

      b();

      function b(){

        console.log('我是bbbbbbbbbb');

      }

05函数的作用域

// 全局作用域 和 局部作用域 中的 变量,重名 不会 相互影响!!因为 两个变量  在 不同的 作用域中!!!

    //1.【作用域】: 变量可以访问的范围

    //2.【全局作用域】: 整个页面就是 全局作用域 -- window对象就是 全局作用域

    //3.【局部作用域】:函数大括号内部 就是 局部作用域

    //4.【全局变量】:在函数外部声明的变量 就是 全局变量  -- 全局作用域里声明的 变量 就是 全局变量

    //5.【局部变量】:在函数内部声明的变量 就是 局部变量

    var num = 1;

    var num2 = 120;

    function a() {

      var num = 10;

      // a.注意:在函数 内部 访问 num时,因为 局部作用域里的 num 和 log 代码 在同一个作用域中,所以 ,打印的就是 局部作用域里的 a

      //      在函数内部 访问变量时,优先使用 函数内部的变量

      console.log('函数内部的 num =' + num); // 10


      // b.注意:在函数 内部 访问num2时,先在 函数内部找 num2,如果没有,就去 全局作用域找 num2

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

      // c. 注意:在函数 内部 访问num3时,先在 函数内部 找 num3,如果没有,就去 全局作用域找 num3,如果还没有,就报错!!!

      // console.log('num3 = ' + num3); // 报错

    }

    a();

    console.log('函数外部的 num =' + num); // 1

06计算三个数的乘积

function plus(x, y, z) {

      var res =  x * y * z;

      return res;

    }

    var num = plus(1,2,3);


    console.log(num);

07求x到y之间所有数字的和

function add(x, y) {

      // 准备 累加和用的 变量

      var sumNum = 0;

      // 循环 生成 x 到 y 之间所有的数

      for(var i = x; i <= y;i++){

        // 将 生成的数 累加到 变量 sumNum 中

        sumNum += i;

      }

      //返回 累加和

      return sumNum;

    }

    var num = add(1, 100);

    console.log(num);

08.求一个数组的最大值

// 求一个 数组中的最大值

    //    1. 数组 是 调用时 传进来的

    //    2. 函数内部要 将 数组中的 最大值 找到,并返回

    function getMax(arrNum) {

      //定义局部变量 maxNum ,用来当做擂台,保存数组中的 最大值

      var maxNum = -Infinity;

      //使用 for 循环 生成 数组里的下标,并 找出最大值

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

        //比较 数组里的元素 和 maxNum 谁大,如果 元素大,就将 元素 存入 maxNum

        if(arrNum[i] > maxNum){

          maxNum = arrNum[i];

        }

      }


      //返回 最大值

      return maxNum;

    }

    //调用函数

    var arrAge = [18, 21, 777,25, 99,30, 77,2];

    var maxAge = getMax(arrAge);

    console.log(maxAge);

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

推荐阅读更多精彩内容

  • 01javascript语法规范 <!DOCTYPE html> javascript语法...
    ouyangqinbin阅读 1,308评论 0 0
  • 一、数组 数组是一个有序列表,所以有下标. 并且数组在js中可以存在任意类型的数据.并且同一个数组中可以存放不同的...
    空谷悠阅读 509评论 0 1
  • 一、JavaScript基础知识回顾 1.1 JavaScript 1.1.1 javascript是什么? Ja...
    福尔摩鸡阅读 1,268评论 0 7
  • 一、 入门 1、 JS代码书写的位置 写在行内 写在script标签中 写在外部js文件中,在页面引入 注意点: ...
    宠辱不惊丶岁月静好阅读 851评论 0 0
  • 第一章 前端三大语言:HTML(专门编写网页内容)、CSS(编写网页样式)、JS(专门编写网页交互行为) 能简写尽...
    fastwe阅读 957评论 0 0