美文网首页
JS基础学习:函数

JS基础学习:函数

作者: Merbng | 来源:发表于2019-03-28 21:55 被阅读0次

    函数:

    把一坨重复的代码封装,在需要的时候直接调用即可。

    作用:

    代码的重用

    函数也是一种数据类型

    <script type="text/javascript">
                function f1() {
                    console.log("嘻嘻嘻嘻嘻")
                }
                console.log(typeof f1); //function
    
    
                function f1(fn) {
                    fn(); //函数调用- 说明fn这个变量中存储的是一个函数
                }
    
                function f2() {
                    console.log("看我看我卡")
                }
                f1(f2);
    </script>
    

    函数作为参数使用

    函数可以作为参数使用,如果一个函数作为参数,那么我们可以说这个参数(函数)叫回调函数

    只要看到一个函数作为参数使用了,就是回调函数

            <script type="text/javascript">
                function sayHi(fn) {
                    console.log("没没没");
                    fn();
                }
    
                function suHay() {
                    console.log(",啊,啊,")
                }
                sayHi(suHay);
            </script>
    

    函数作为返回值使用

    函数可以作为返回值使用

            <script type="text/javascript">
                function f1() {
                    console.log("f1函数调用了");
                    return function() {
                        console.log("这是函数");
                    }
    
                }
                var f = f1();
                f();
            </script>
    

    作用域

    JS没有块级作用域
    全局变量:
    (除函数内)声明的变量是var声明的,可以在全局中使用
    如果页面不关闭,那么就不会释放,就会占空间,消耗内存
    局部变量:
    函数内部定义的,外面不能使用
    全局作用域:全局变量的使用范围
    隐式全局变量:
    声明的变量没有var ,就叫隐式全局变量。
    全局变量是不能被删除的,但是隐式全局变量是可以被删除的
    定义变量使用var是不会被删除的,没有var 是可以被删除的

            <script type="text/javascript">
                function f1() {
                    number = 1000;
                }
                f1();
                console.log(number);
    
                var n1 = 10;
                 n2 = 20;//隐式全局变量
                delete n1;//使用var是不会被删除的
                delete n2;//把n2删除了
                console.log(n1);
                console.log(n2);
            </script>
    

    预解析
    js代码的执行是由浏览器的js解析器来执行的,js解析器解析js代码的时候,分为两个过程

    预解析过程:
    1.把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
    2.把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
    3.先提升var,再提升function

    <script type="text/javascript">
                //          var a = 25;
                // 
                //          function abc() {
                //              alert(a);
                //              console.log(a); //undefined
                //              var a = 10;
                //              // 只会提升声明,不会提升赋值
                //              /* 相当于 
                //              var a;
                //              console.log(a);
                //              a = 10;
                //              */
                //          }
                //          abc();
                //          //访问不了局部变量,
                //          console.log("值:"+a);//25
                //          console.log("第一个:"+a());
                // 
                //          function a() {
                //              console.log('aaaaaaaa');
                //          }
                //          var a = 1;
                //          console.log(a);
                // 结果:aaaaaaaa
                // 预解析.html:30 第一个:undefined
                // 预解析.html:36 1
    
                // 相当于  var a;  
                //          a=18;
                var a = 18;
                // 相当于
                /*          function f1() {
                                var b = 9;
                                console.log(a); //undefined
                                var a = '123';
                            }
                            f1(); */
                f1();
                function f1() {
                    var b = 9;
                    console.log(a); //undefined
                    var a = '123';
                }
            </script>
    

    预解析识别:

    <script type="text/javascript">
    //          f1();
    //          console.log("函数外c:" + c);
    //          console.log("函数外b:" + b);
    //          console.log("函数外a:" + a);
    // 
    //          function f1() {
    //              var a = b = c = 9;
    //              console.log("函数内a:" + a);
    //              console.log("函数内b:" + b);
    //              console.log("函数内c:" + c);
    //          }
                f1();//报错
                // 案例
                var f1 = function() {
                    console.log(a);
                    var a = 10;
                }
            </script>
    

    相关文章

      网友评论

          本文标题:JS基础学习:函数

          本文链接:https://www.haomeiwen.com/subject/glrhbqtx.html