我想知道我们是否可以在一个IIFE中声明一个变量并返回它,但可将其提供给另一个特定的IIFE?这是一个例子!
所以我有
const iife1 = (()=>{
const x = 10;
return x
})()
const iife2 = (()=>{/* MAKE X AVAILABLE ONLY IN THIS FUNCTION */})()
const iife3 = (()=>{/* HERE X CANNOT BE CALLED */})()
也许您会说只是不将i变量3中的变量x作为参数传递,但是我想知道从iif1返回变量时是否有条件方式可以实现它,所以iif1会知道针对哪些函数它会在实际返回之前返回其属性或方法!
我的目标是创建一个IIFE,在其中我将声明要在项目中使用的所有变量。然后,对于每个变量,我希望有一个适当的条件,以便当带有变量的IIFE返回时,该函数已经确定了哪个范围将变量发送给使用!我不知道这种方法是否有意义,但正如我经常说的那样,我试图不填充全局范围。
答案 0 :(得分:0)
IIFE 只能使用Global
,Passed
或内部变量。您不能使某项功能对某个功能范围不可用,而该功能对同一范围中的第二个功能不可用。
传递变量是一种方法,但是在某些情况下,更实用的方法是根据需要嵌套 IIFE
const iife2 = (() => {
const iife1 = (() => {
const x = 10;
return x
})()
console.log(iife1);
/*iife2 scope*/
})()
const iife3 = (() => { /* HERE X CANNOT BE CALLED */ })()
答案 1 :(得分:0)
没有必要使用三个IIFE,请记住,一旦您的iife1
返回,该值将在iife2
和iife3
的同一范围内,因此您将无法实现你的目标。
您最好的选择是将iife2
和iife3
声明为普通函数,并在满足某些条件时在iife1
中调用它们,并传递将创建{{1 }}作为参数。
此解决方案比依赖外部范围更灵活,更可预测
iife3
答案 2 :(得分:0)
(可能的十几种)方法之一是使用Proxy
。
First IIFE将创建一个代理对象,您可以通过该对象访问其属性。调用revoke()
之后,您将无法再访问代理的任何道具。
正如人们在评论中指出的那样,可能有很多更简单的方法让您获得想要的结果,但是您并没有清楚地提出实际问题。
const { proxy, revoke } = (() => {
const x = { test: 'test' };
const revocable = Proxy.revocable(x, {
get: (target, name) => name
});
return revocable;
})();
const test1 = (proxy => {
console.log('TEST 1', proxy.test);
})(proxy);
revoke();
const test2 = (proxy => {
console.log('TEST 2', proxy.test); // can't access
})(proxy);