美文网首页
Android 程序员搞 web 之 js基础(十)

Android 程序员搞 web 之 js基础(十)

作者: 吾乃韩小呆 | 来源:发表于2019-11-20 09:04 被阅读0次

    Android 程序员搞 js 之 基础(九)

    一、arguments 对象伪数组

    这个伪对象可以替换 函数传入的任何参数如下:

     <script>
            function f() {
                console.log(arguments)
            }
    
            f(1,2,3,4,5,6)
        </script>
    
    伪数组传入数据

    二、函数的其他定义形式

    函数的命名方式
    1、命名函数
    定义:函数有名字,就是命名函数;
    2、匿名函数
    定义:函数没有名字,匿名函数;

    函数表达式

    定义:把匿名函数赋值给一个变量而形成的表达式;

      <script>
            var fun = function () {
                console.log("我是一个匿名函数")
            };
    
            fun()
        </script>
    
    函数表达式

    注意:

    1、函数表达式,调用两次,则可以出现两次结果

      <script>
            var f1 = function () {
                console.log("函数一")
            };
    
            f1();
    
            
            f1 = function () {
                console.log("函数二")
            };
            f1();
    
        </script>
    
    注意事项

    同名函数调用两次,只会执行一个函数,并且是最后面的函数

      <script>
            function f1() {
                console.log("函数一")
            };
    
            f1();
    
    
            function f1() {
                console.log("函数二")
            };
            
            f1();
        </script>
    
    注意事项

    2、声明函数之后直接调用

     <script>
    
            (function () {
                console.log("直接调用的函数")
            })();
            
        </script>
    
    直接调用的函数

    3、函数也是一种数据类型

    类型为 function

    4、回调函数

    定义:将函数作为参数使用,则为回调函数

       <script>
            function f1() {
    
            }
    
            function f2() {
                console.log("打印函数 2")
            }
    
            f1(f2());
        </script>
    
    函数作为参数使用

    5、函数作为返回值

    当函数作为返回值的时候,需要用一个变量去接收这个函数的返回值,否则调用毫无意义;
    代码如下:

      <script>
            function f1() {
                console.log("带有返回值的函数");
                return function () {
                    console.log("这是一个函数返回值")
                }
            }
    
            var ff = f1();
    
            ff();
        </script>
    
    image.png

    三、函数的作用域

    1、全局变量

    定义:使用 var 定义的变量为全局变量,全局变量可以在页面内任何地方使用。
    注意:全局变量,如果页面不关闭,则一直不会被释放,导致一直占用内存空间,消耗内存。

    2、局部变量

    定义:在函数内定义的变量为局部变量,外部不可以进行使用。

    注意:局部变量 当函数调用完成之后,局部变量就会消失。

    3、全局作用域

    定义:全局变量的使用范围。

    4、局部作用域

    定义:局部变量的使用范围。

    5、块级作用域(js 没有块级作用域)

    定义:一对大括号就可以看成是一块作用域。js 在一对大括号内定义的变量可以在大括号外面进行使用,所以 js 内没有块级 作用域。

    6、隐式全局变量

    定义:声明变量没有var ,就叫做隐式全局变量
    全局变量不可被删除,隐式全局变量可以被删除;

    四、作用域链

    函数内嵌套函数并且被调用,从而形成作用域链

     <script>
    
            var num = 10;
    
            function f1() {
                var num = 20;
    
                function f2() {
                    var num = 30;
    
                    function f3() {
                        var num = 40;
                        
                        console.log("num:" + num)
                    }
    
                    f3()
                }
    
                f2()
            }
    
            f1();
    
        </script>
    
    作用链

    同名变量 使用为 就近原则。

    五、预解析

    预解析:就是在解析代码之前
    预解析作用:把变量和和函数声明提前到当前所在的作用域的最上面。
    函数声明提前,依然可以起作用,而变量提前则会产生 undefined 结果;
    预解析分段 (多段 script 标签内的重名函数,不干涉);
    案例:

     <script>
            f1();
            console.log(c);
            console.log(b);
            console.log(a);
    
            function f1() {
                var a = b = c = 9;
                console.log(a);
                console.log(b);
                console.log(c);
            }
        </script>
    

    结果:

    运行结果
    由于 预解析的存在 导致 b、c为 隐式全局变量,而 a 为局部变量,所以 a 报错,其他的显示正常值
    Android 程序员搞 js 之 基础(十 一) 难点
    欢迎关注.jpg

    相关文章

      网友评论

          本文标题:Android 程序员搞 web 之 js基础(十)

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