如何使用require执行带参数的立即执行函数表达式(IIFE)
问题原因与解决方法
你代码报错的核心原因是:iifeFile.js里导出的是IIFE执行后的结果,而非函数本身。你在函数末尾加了(),导致模块加载时这个函数就直接执行了,require('./iifeFile')拿到的是执行后的返回值(如果函数没写return,就是undefined),自然没法像函数一样调用。
正确写法分两种情况:
情况1:直接导出可传参的函数(最常用)
去掉IIFE后面的(),导出函数本身,这样require后就能传参数调用:
// iifeFile.js module.exports = function(arg1, arg2) { // 业务逻辑,直接使用arg1和arg2 };
// index.js const a = require('./iifeFile')(arg1, arg2);
情况2:保留IIFE封装逻辑,同时支持外部传参
如果你的业务逻辑需要用IIFE封装私有变量,但又要接收外部参数,可以把IIFE嵌套在导出函数里,利用外层函数接收参数:
// iifeFile.js module.exports = function(arg1, arg2) { // 私有变量,外部无法直接访问 const privateData = '仅内部可用'; // 用IIFE封装的业务逻辑,使用传入的参数 return (function() { console.log(arg1, arg2, privateData); // 这里可以返回需要暴露的内容 })(); };
// index.js const a = require('./iifeFile')('参数1', '参数2');
内容的提问来源于stack exchange,提问作者Oli
相关产品推荐
相关产品推荐

