封装-自执行函数-命名空间

1.封装

1.概念

通过命名空间或自执行函数实现程序的基本封装

2.提升程序的可维护度

2.自执行函数

1.概念

是一种将函数声明和调用合并到一起的写法

2.代码执行

常见写法
在这里插入图片描述

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // 自执行---函数  ---------------------------------- > 避免了变量污染

        // 自执行函数,为什么避免了变量污染?
        // 因为他没用函数名,避免了重名,我们把这种情况叫做,避免变量污染!!!

        // 调用函数  --- 普通
        function a() {
            document.write('123')
        }
        a()
            // 将函数的声明和调用合并到一起    --- 自执行函数1
        ; (function () {
            document.write('456<br>')
        }())
        // ---------------------------------- 自执行函数2
        let b = 10                      // 之所以加 ; 就是因为浏览器可能将a解析成函数名
        ;(function () {                 // 加上分号 可以断绝与前面的错误
           document.write('789')
        })()
    </script>
</body>

</html>

3.本质

1.自执行函数与普通函数无本质区别,它简化了普通函数的步骤
2.自执行函数同样具有形参和实参
3.自执行函数一般使用匿名函数
4.自执行函数实际是函数表达式,属于高阶函数

4.注意:自执行函数前面尽量都加上分号

1.不然会引起错误
2.后期我们压缩代码也会引起错误
3.常见的除了分号之外也有 !或者+
4.但是加分号是我们最常见的写法

2.命名空间

1.概念

命名空间本质上是一个普通对象,将具有关联性的变量和函数封装起来,做为该对象的属性或方法

2.优点

1.解决变量污染的问题

2.变量污染:占用某个变量导致后续无法使用此变量(标识)的问题

3.因为我们在公司基本上都说是多人协作,为防止变量污染,我们通常使用命名空间或者自执行函数进行封装

2.代码演示

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 命名空间,本质上是一个对象,在对象中我随意起名字,跟外边没有关系

        // 相同的函数和变量封装在函数中,避免了变量污染

        // 就是防止你和同事,写了相同变量名,起了冲突问题


        let num = 10

        let ls = {                 // 对象是一个空间,每个对象都不一样,不会造成变量污染
            num: 10,
            sayHi: function () {
                console.log('李四');
            }
        }

        let zs = {
            num: 10,
            sayHi: function () {
                console.log('张三');
            }
        }
        console.log(zs.num);
        console.log(ls.num);
        console.log(num);


    </script>
</body>

</html>

3.封装一个命名空间,将时间对象封装

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 比如封装命名空间----日期对象
        // 将常用的变量存放到命名空间之中
        let date = {
            author: 'jikel',         // 作者
            time: new Date(),
            year: function () {
                return this.time.getFullYear()
            },
            m: function () {
                return this.time.getMonth() + 1
            },
            day: function () {
                return this.time.getDate()
            }
        }
        console.log(date.year());
        console.log(date.m());
        console.log(date.day());
        document.write(`${date.year()} -- ${date.m()} -- ${date.day()}`)
    </script>
</body>

</html>

4.总结以上点

自执行函数
自执行函数与普通函数无本质区别,它简化了普通函数的步骤
自执行函数同样具有形参和实参
自执行函数一般使用匿名函数
自执行函数实际是函数表达式,属于高阶函数

命名空间
命名空间本质上是一个普通对象,将具有关联性的变量和函数封装起来,做为该对象的属性或方法
解决变量污染的问题
变量污染:占用某个变量导致后续无法使用此变量(标识)的问题

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值