JavaScript中如何在立即执行函数(IIFE)间传值及调用方法
解决立即执行函数间的传值与方法调用问题
首先得先指出你原代码里的一个小坑:你把example1放在example2前面定义了,由于JS的变量声明提升特性,当example1的立即执行函数执行时,example2还没完成初始化,传进去的其实是undefined,这肯定达不到你想要的效果。接下来给你几种可行的解决方案:
方案一:调整声明顺序,直接调用example2的方法
最简单的方式就是把example2的定义放到example1前面,这样example1执行时就能拿到example2返回的对象,直接调用它的getvalue方法获取值:
// 先定义example2,确保example1执行时它已经初始化完成 let example2 = (function(){ let _testvalue = 12; return{ getvalue : function(){ return _testvalue; } } })(); let example1 = (function(example2Instance){ // 调用example2的getvalue方法拿到值 const receivedValue = example2Instance.getvalue(); console.log("从example2拿到的值:", receivedValue); // 输出12 // 这里可以做后续处理 })(example2);
方案二:延迟获取example2(不调整顺序的情况)
如果因为某些原因不能调整两个函数的定义顺序,那可以让example1接收一个函数,通过闭包延迟获取example2的引用,这样等到example2初始化完成后再调用:
let example1 = (function(getExample2){ // 延迟获取example2实例,比如在需要的时候调用这个函数 setTimeout(() => { const example2Instance = getExample2(); const receivedValue = example2Instance.getvalue(); console.log("从example2拿到的值:", receivedValue); // 输出12 }, 0); })(() => example2); let example2 = (function(){ let _testvalue = 12; return{ getvalue : function(){ return _testvalue; } } })();
方案三:让example1提供接收方法,example2主动传递
这种方式更灵活,example1暴露一个方法来接收值,example2初始化完成后主动调用这个方法传递数据:
let example1 = (function(){ let internalValue; // 暴露接收值的方法 return { setValue: function(val){ internalValue = val; console.log("example1收到的值:", internalValue); // 输出12 } } })(); let example2 = (function(){ let _testvalue = 12; // 初始化完成后主动给example1传值 example1.setValue(_testvalue); return{ getvalue : function(){ return _testvalue; } } })();
以上几种方法都能实现你要的“example2向example1传值”或者“example1调用example2方法”的需求,你可以根据实际场景选择最合适的~
内容的提问来源于stack exchange,提问作者lx6002
相关产品推荐
相关产品推荐

