JS基础学习:函数

2019-03-28  本文已影响0人  Merbng

函数:

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

作用:

代码的重用

函数也是一种数据类型

<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>
上一篇 下一篇

猜你喜欢

热点阅读