Vue源码学习之Vue对于闭包的使用

303 阅读1分钟

闭包 就是能够读取其他函数内部变量的函数。只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数

闭包在js中是一个很常见的一个结构,它允许你访问父级作用域的变量,并在持续保持引用时保证父级作用域的这个变量不会被内存回收机制回收(不会被销毁)

数据响应化Observer中使用闭包

image.png

    function defineReactive(target, key, value){
            return Object.defineProperty(target, key, {
                    get(){
                            return value;
                    },
                    set(newValue){
                            // 很多大兄弟不理解这一块,为什么给他赋值能够达到改变值的效果
                            // 这里就用到了闭包的原理,执行n次,就会开辟n次,这个value 会一直在内存中
                            // 比如 obj.name 就会直接从内存中取值,
                            value = newValue;
                    }
            });
    }

    let obj = {
            name: '安红',
            age: 18
    };

    Object.keys(obj).forEach(key=> {
        // 每执行一次都会开辟一个defineRealive内存空间,并且这个内存空间不会被销毁
        defineReactive(obj, key, obj[key])
    });