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

2019-11-20  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读