首页 > 其他分享 >require出来的值如何监听到原模块中值的变化

require出来的值如何监听到原模块中值的变化

时间:2023-04-18 17:24:04浏览次数:29  
标签:闭包 const require 导出 obj 模块 中值 监听

前言

众所周知,esmodule导出的值是对应模块导出值的引用,一旦模块内部使该值发生了变化,获得的值也会变化。而commonjs种的require函数,是获取了该模块导出值的拷贝,如果原模块中的值发生了变化,是拿不到最新的值的,那么有没有办法可以获取到最新的值呢。

解决思路

  • 既然正常方法是拿不到对应的值,那么通过闭包是不是可以呢,说试就试。

test.js

let obj = { a: 1 };

setTimeout(() => {
    obj.a = 2;
}, 2000)

const getFn = () => {
    return () => {
        return obj;
    }
};

const fn = getFn();

exports.getA = fn;

index.js

const a = require('./test').getA();

setTimeout(() => {
    console.log(a); // { a: 2 }
}, 3000);
  • 结果就是可以,将一个闭包函数抛出来,利用闭包的特性是可以达到这样的效果的。

标签:闭包,const,require,导出,obj,模块,中值,监听
From: https://www.cnblogs.com/aloneMing/p/17330363.html

相关文章

  • 拦截器,过滤器,监听器区别
    1:本处讨论和语言无关 2:监听器一般是内部target对象触发event事件,常见设计上使用EventManger,event,eventAction三个对象封装处理,原则上使用观察者模式 3:拦截器和过滤器一般都是外部触发, 拦截器是拦截行为,过滤器是过滤数据,原则上使用代理模式......
  • 关于Java中值传递和址传递
    参数传递在Java中有两种类型值和址其实本质都是一份拷贝在调用函数的时候进行压栈传进来的参数会被开辟一份新的空间传基本类型是把值传过去传引用数据类型是实例指向实参voidm(intv){//基本数据类型传值是一份拷贝不会影响实参v++}voidm(int[]arr){//底层i......
  • vue全家桶进阶之路32:Vue3 WatchEffect和watch 监听
    在Vue3中,watchEffect是一个用于监听响应式数据变化的API。它可以在函数内部自动跟踪数据的依赖,并在依赖变化时重新运行函数。watchEffect 的作用以及各个参数的功能讲解:watchEffect(effect:(onInvalidate:InvalidateCbRegistrator)=>void|(()=>void)|Promise<vo......
  • RequireJS 和 SeaJS 模块加载器
    RequireJS和SeaJS都是很不错的模块加载器,两者区别如下:1.两者定位有差异。RequireJS想成为浏览器端的模块加载器,同时也想成为Rhino/Node等环境的模块加载器。SeaJS则专注于Web浏览器端,同时通过Node扩展的方式可以很方便跑在Node服务器端2.两者遵循的标准有差异。Re......
  • Splunk DB Connect 连接MySQL报错CLIENT_PLUGIN_AUTH is required
    01、问题描述使用SplunkDBConnect连接MySQL数据库读库时,报错CLIENT_PLUGIN_AUTHisrequired,如下图:02、原因分析根据报错信息,查阅相关资料,了解到报错原因:目标数据库为MySQL5.7,使用的mysql-connector-java-8.0.28.jar,mysql的jar包版本过高。JDBC数据库驱动程序:mysql-connector-......
  • python+playwright 学习-52 iframe 定位与操作元素,监听事件,执行JS脚本总结
    前言本篇全面总结关于iframe的定位,iframe上元素的操作(输入框,点击等),iframe上的事件监听与iframe上执行JS脚本的总结。iframe对象的定位定位iframe对象,总的来说有四种方法page.frame_locator(selector)通过page对象直接定位iframe对象,传selector选择器参数page.loca......
  • 在Vue中,关于require与required
    在Vue里面,是用require还是required?始终拿捏不定,所以这里记录一下图片是require('@/xxx')props里面是required表单验证里面是required总结:只有图片是require,其它都是required......
  • 监听器Listener使用&Session
    使用配置xml配置1.编写一个监听ServletContext生命周期的Listener;实现Listener接口在当前2.项目中注册(在web.xml)使用;publicclassMyServletContextListenerimplementsServletContextListener{@OverridepublicvoidcontextInitialized(ServletContextEventsce){......
  • repository does not exist or may require 'docker login'
    理论上从docker hub拉取镜像时是不需要的登录,所以就只有一个原因: repositorydoesnotexist仓库类型将私有改成公开 ......
  • 解决nvm升级node v18.14.0时/lib64/libm.so.6: version 'GLIBC_2.27' not found (requ
    安装v18.14.0时的报错和解决方法1.报错[root@devops03~/.nvm]#nvminstallv18.14.0Downloadingandinstallingnodev18.14.0...Downloadinghttps://npm.taobao.org/mirrors/node/v18.14.0/node-v18.14.0-linux-x64.tar.xz...#######################################......