JavaScript Day04

函数

什么是函数

    把特定代码片段,抽取成为独立运行的一个实体,就是函数
把函数理解为工具,日常的工具有哪些?
冰箱,洗衣机

工具有哪些特点

1.使用简单,无需原理
2.可以重复使用,不受限制
3.方便,效率高

函数有哪些好处

    可以复用.
    提高可读性
    方便维护

函数的分类

系统函数 内置函数 自定义函数

系统函数,内置函数:

是官方提供的函数,可以直接使用
如:alert(),isNaN(),console.log(),

自定义函数:

是用户自己定义的函数,用户可以根据实际需求,对特定的功能使用函数来封装
v8引擎可以在node.js中跑起来
    js (浏览器,nodejs服务器)

定义函数

function calc(n,m){
    var res = n + m;
    return res
}
1.定义函数,必须使用必须使用function关键字
2.函数的名称,遵循命名规则
    1.只能是数字,字母,下划线,$;
    2.不能以数字开头
    3,不能是保留字或者关键字
    4,严格区分大小写
    5,遵循驼峰命名法
    6,语义化

形参(形式上的参数)

    形式参数的个数是可以随意定的,可以是0;
    它的默认值是undefined,他是一个局部变量,只能在大括号里面使用
    只有在调用的时候,才能确定类型和值
        什么时候用形参
        当有不确定的值就用形参

function中的大括号,作为一个保护作用,与外界变量不会相互影响

    return终止函数,并返回结果,return关键字 后面一行代码,将不会被执行
    
    如果函数没有return关键字.,该函数将默认返回undefined

函数的调用

            var result=calc(10,20);
        实参就是一个具体的值或者变量执行完函数的结果

遵循先定义.后使用

    函数的调用方式:  函数名()
    
        如:调用下面的函数:printOut();
        
        function printOut{
            document.write("Hello World!")
        }
        
        
    注意:
    1,调用函数后会执行函数内部的代码块;
    2,函数在不调用的情况下是不会执行的,只有调用后函数中的代码才会执行

    大部分情况  有参数,有返回值  parseInt(),parseFloat();
    有参数,无返回值 
    无参数,有返回值
    无参数,无返回值
    console.log();alert();document.write();parseInt()
    prompt();
    toFixed();
    typeof();
    isNaN();
    confirm("你确定要删除吗");有返回值
    Math.round()四舍五入;
    定义一个没有返回值的函数

作用域:

    就是起作用的范围.或者说有效范围
            1.  啥时作用域
                 就是作用的范围

        2.全局和局部
            函数以外的变量,就是全局
            函数内部的变量,就是局部
            如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。
                        
        3.如果全局和局部同时存在?
            如果全局变量和局部变量冲突重名,局部变量在作用域范围内会覆盖全局变量

4.JavaScript 变量生命周期

            JavaScript 变量生命周期在它声明时初始化。
            局部变量在函数执行完毕后销毁。
                全局变量在页面关闭后销毁。

全局变量和局部变量案例

        <script>    
            var n = 10
            function fn(){
            var n;
            console.log(n);//udefined
            n=200;
            console.log(n);//200,局部变量优先
             }
            function fn1(){
                var n=m=200;// var n=m;  m=10;
                console.log(m);//200
                console.log(n);//200
            }
            fn1()
            console.log(n);//  undefined
            console.log(m);//200  m没有被var定义到,是全局变量.
           function fn1(m){//    m被定义为局部变量,形参是局部变量
                var n=m=200;// var n=m;  m=10;
                console.log(m);//200
                console.log(n);//200
            }
          fn1()
           console.log(n);//undefined
            console.log(m);//undefined
        </script>

函数的嵌套

内部函数不能被外部函数调用,可以调用外部函数
内部函数不能调用外部函数的内部函数,也不能被外部函数的内部函数调用

arguments

    1.它只能在函数内部出现
    2.他是伪数组
    3.用于接受实参


    function fn(){
        var arr=[];//真数组
         console.log(arr);
        console.log(arguments);
    }
    fn(100);//arguments  接受实参


        function fn1(){
            var sum=0;
            for(i=0;i<arguments.length;i++){
                sum+=arguments[i];
            }
            return sum;
        }
        console.log(fn1(20,20,30,100));
    其中(20,(arguments[0])     20,(arguments[1])     30,      100)
arguments.length表示伪数组arguments的长度
arguments[0];表示伪数组的第一个数,arguments用来接受实参

DOM的操作:

1.获取元素节点对象:document.getElementById('id');
2,获取输入框的内容:value属性
3,点击事件:onclick
    示例:
    在输入框中输入数字,点击按钮调用函数来判断奇偶性?
    注意:document.write()在文档页面加载完后使用会覆盖页面内容,尽量少用

事件驱动:

因为函数不会主动执行,只有当调用的时候才会执行函数中的代码,在前面的DOM操作中,我们点击了按钮才触发函数调用

所有的函数,没有调用不会执行,那么在我们浏览器中函数用的源头在何处,就是事件,只有使用事件去驱动,函数才被调用;如:onclick:点击事件

 //1.获取指定按钮
        var oBtn = document.getElementById("btn") //通过id获取文档里的元素
        //2.给按钮绑定点击事件 (绑定,不代码执行)
        // onclick 点击
        //事件也可以帮忙执行函数
        oBtn.onclick = function () {
            //3.执行事件,逻辑代码
            console.log("台上的男人真帅!");
        }
        //1.鼠标点击页面的按钮,也执行函数
        //2.还可以直接执行函数,把 onclick当做函数名对待
        oBtn.onclick();


 //一口气拿到 页面上所有的按钮
        var oBtns = document.querySelectorAll("button");
        //遍历5个按钮
        for (var i = 0; i < oBtns.length; i++) {
            //  console.log(i);
            //给每一个按钮绑定点击事件
            oBtns[i].onclick = function () {
                //获取下标
                console.log(i);
            }
        }
        console.log(i);
        //点击按钮3,i打印了谁? 2 ,0 ,   0 ,1,2

函数的递归调用:

函数可以自己调用自己,必须有结束条件,成为函数的递归调用
    
重要性:
递归的分量,递归属于函数中比较难理解的知识,在应用开发中,虽然使用不是很频繁,但是很体现你的功底,而且,从事IT行业,最好要会递归,如果说现在可以不要求里;灵活运用的话,以后到公司中一定要会,如果面试中有人问你递归,说明,他对你要求挺高

递归调用的方式:
1,首先去找临界值,及无需计算,获得的值(一般该值是返回值).
2.找这一次和上一次的关系(一般从后往前找)
3,假设当前函数已经可以使用,调用自身计算上一次的运行结果,再写出这次的运行结果。

1.什么是递归?

    // 函数自己调用自己,必须有零界点(结束条件)
    //2.递归能做什么?
    // 循环能做的事,递归都能实现
    // 递和归 都做了什么事?

1. 到100的和使用递归实现?

        function fn(n) {
            if (n == 1) {
                return 1;//终止函数,并返回结果
            }
            return n + fn(n - 1);
        }

        console.log(fn(100));

2.实现 1到100的乘积

    function fn1(n) {
        if (n == 1) {
            return 1;
        }
        return n * fn1(--n)
    }
    console.log(fn1(5));

3. 输入一个n,打印n个hello world

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

推荐阅读更多精彩内容

  • JavaScript是一种能让你的网页更加生动活泼的语言,你可以利用JavaScript轻易的做出亲切的欢迎讯息、...
    kmmyzi阅读 467评论 0 0
  • 一、函数的概念 函数是一段可以反复调用的代码块。 作用:在程序设计中,常将一些常用的功能模块编写成函数,以减少重复...
    MJ的小世界阅读 149评论 0 1
  • 1、BOM浏览器对象模型 1-1:window对象: 1-1-1:属性:close:代表一个窗口是否是关闭的 ...
    宝宝跟你们拼啦阅读 114评论 0 0
  • 简介:JavaScript 是脚本语言,是一种轻量级的编程语言,是可插入 HTML 页面的编程代码, 插入 HTM...
    夜幕小草阅读 1,127评论 0 29
  • 1 闭包 闭包就是能够读取其他函数内部变量的函数 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的...
    Promise_4483阅读 580评论 0 0