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)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容