10.13上课摘录

1、什么是闭包?

<script>
        // 闭包(closure):闭包是一种代码形式,内部函数访问外部函数的局部变量。
        // 在JS中,每当创建一个函数,闭包就会在函数创建的同时被创建出来,作为函数内部与外部连接起来的一座桥梁。
        
        // 举例:js函数A里面有一个函数B,函数B访问了函数A里面定义的局部变量,此时就产生了闭包。
        // 变量所在的函数就是闭包函数,这里A就是闭包函数。 
        
        // 外部函数
        function outer() {
            // 外部函数中的局部变量 let n = 10

            // 内部函数
            function inner() {
                // 内部函数访问外部函数的局部变量 
                console.log(n);
            }

            // 将内部函数return出去,这样外部才可以调用 
            return inner
        }

        let fn = outer();
        
        console.log(fn); fn()
    </script>

2、闭包的作用一:

<script>
        // 作用1:解决变量污染问题,让变量被函数保护起来。
            
        // 示例代码
            // let count = 0
            // setInterval(function (){
            // console.log(count++); 
            // },1000)

            // 以上代码中的count是一个使用频率很高的变量名。
            // 为了避免和其他位置的代码冲突,可以再使用一个函数把以上的代码包裹起来.起到保护作用。

            // function fn() {
            //     let count = 0

            //     setInterval(function () {
            //         console.log(count++);
            //     }, 1000)
            // }

            fn()
        // 以上代码中,setInterval函数与count构成了闭包

        function fn(){

            let count = 0

            function add(){
                console.log(count++);
            }

            setInterval(add,1000)
        }
        fn()
        // 上面代码中,setInterval函数与count构成了闭包

        // 总结:一个函数使用了外部的变量,那这个函数和被使用的外部变量预期被称为闭包结构
        //       在实际开发中,通常会再使用一个函数包裹住闭包结构,以起到对变量的保护作用

        function fn(){}
        </script>

3、闭包作用二:

<script>
        // 作用2:可以延长变量的生命周期

        // 变量的声明周期:
        // 全局变量:从声明开始 直到 页面关闭
        // 局部变量:从声明开始 直到 函数执行结束

        // 【全局变量】
        // 全局变量n 写在函数外面 
        let n = 10;
        function ck() {
            console.log(n);
        }
        // 函数内部可以访问到全局变量 
        ck()//10

        // 【局部变量】
        // function outer(){
        // 局部变量:特点1-只能在函数内部访问
        //  特点2-函数执行结束后就会被销毁
        // let b = 20;
        // // 内部访问局部变量v
        // console.log(b); //20
        // };
        // outer();
        // 函数作用域外,访问局部变量x
        // console.log(b);

        // 【将上述情况变成闭包函数,定义一个内部函数,让其访问到外部函数的局部变量】 
        function outer() {
            let b = 20;

            return function inner() {
                console.log(b);
            }
        }
        let fun = outer()

    //fun()
    //取消注释,打印45行结果 访问到42行打印的b
    </script>

4、闭包作用三:

<script>
        // 作用3:提供了有限的访问权限
        function data(){
            let age = 9

            // 读取数值
            function getAge(){
                // return age
            }

            // 设置数据
            function setAge(n){
                // 在赋值时,所赋的值解析合理的校验
                if(n>0 && n<100){
                    age = n
                }
            }

            // 返回一个对象到外部,对象带着两个内部函数
            return {
                getAge:getAge,
                steAge:setAge
            }
        }
        let  op = data();
        op.setAge()
        console.log(op.getAge());
    </script>

对象是什么?

1、对象介绍:

<script>
        // 1.对象是什么:对象是一种复杂数据类型。
            // 2.对象作用:以键值对方式存储多个数据。
            //3.对象和数组异同点相同点:都是复杂数据类型,都可以存储多个数据。
            // 不同点:存储方式不同。 
            // 数组:有序存储。 
            // 对象:无序存储(键值对)。 
            //  需求:存储一个人的信息(姓名,年龄,性别)

            // 1.使用基本数据类型 
            let name = '熊大'
            let age = 9
            let sex = '男'
            // 好处:阅读性高// 弊端:冗余
            // 2.使用复杂数据类型-数组 
            let arr = ['熊大', 9, '男']
            console.log(arr);
            // 好处:一个变量存储多个数据
            // 弊端:阅读性不高
            // 3.使用对象
            let obj = { name: '熊大', age: 58, sex: '男' }
    </script>

2、对象语法:

<!-- 1.声明对象
                    let 对象名 = {属性名:属性值,属性名:属性值,
                    }
                2.取值语法
                    对象名.属性名 -->
    <script>
        let obj = {
            name: '熊二',
            age: 18,
            gfs: ['翠花', '大黑', '铁柱'],
            sayHi: function () {
                console.log(222);
            },
        }
        console.log(obj);
        console.log(obj.name);
        console.log(obj.age);
        console.log(obj.gfs);
        console.log(obj.gfs[2]);
        console.log(obj.sayHi);
        console.log(obj.sayHi());

                    // 细节:对象中的属性值是什么数据类型,取出来的时候就可以使用这个类型的所有语法。
                    // 如:对象中的属性值是 数组,则可以:对象名.属性名[下标]
                    // 如:对象中的属性值是 函数,则可以:对象名.属性名()
        </script>

3、对象操作(增删改查):

<script>
        let obj = {
            name: '熊大',
            age: 9,
            sex: '男',
        }
        // 1.查询语法(属性名存在,获取属性值;属性名不存在,获取underfined)
        // a.点语法 对象名.属性名// b.[]语法 对象名['属性名']
        // a.点语法 对象名.属性名
        console.log(obj.name);//熊大
        console.log(obj.age);//9
        console.log(obj.sex);//男
        console.log(obj.country);//undefined
        // b.[]语法对象名['属性名']
        console.log(obj['sex']);//男
        // 2.修改属性
        // a.对象名.属性名 = 值
        // b.对象名['属性名'] = 值 
        obj.name ='熊二'; obj['age'] = 8;
        console.log(obj);//{name:'熊二',age: 8,sex:'男'}
        // 3.新增属性
        // a.如果对已经存在的属性赋值,则是修改
        // b.如果对不存在的属性赋值,则是新增 
        obj.hobby = '吃蜂蜜'
        console.log(obj);//{name:'熊二",age:8,sex:"男',hobby:'吃蜂蜜'}
        // 4.删除对象属性
        // delete 对象名.属性名 
        delete obj.age
        console.log(obj);//{name:'熊二",sex:'男',hobby:'吃蜂蜜'}
    </script>

4、对象遍历:

<script>
        // 1.遍历数组:for循环
        // for(let i = 0; i < arr.length; i++){ arr[i] }
        // 2.遍历对象:特殊的for-in循环(专门用于遍历对象)
        // for(let key in 对象名){ 对象名[key] }

        let obj = {
            name: '熊大', age: 8, sex: '男', hobby: '吃蜂蜜'
        }
        for (let key in obj) {
            console.log(key); //'name' 'age' 'sex' 'hobby' 
            console.log(obj[key]); //'熊大''8''男''吃蜂蜜'
        }
    </script>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值