我在我的代码中有一个生命,在那里没有其他的IIFE。他们都有名字(所以他们不是匿名的)。我想以后再调用一些生命(是的,他们一开始就做他们的工作,但我希望以后再用),通过其他的功能。例如:
(function start()
{
/* some code*/
(function firstIIFE(param1, param2)
{
if (param1 && param2)
{
console.log('param1 ',param1, 'param2 ',param2);
return;
}
/* some code done when IIFE originally was self-invoked */
}(param1, param2));
/* some code */
}());
function foo()
{
start.firstIIFE(param1, param2);
}是否有可能在以后调用(firstIIFE)生命?因为我希望这个函数能够使用param1和param2 (我在调用这些生命之后创建的)做一些事情?目前,我得到了错误,例如:未定义ReferenceError: param1未定义
发布于 2016-01-10 02:15:18
按照编写代码的方式,您将无法访问firstIIFE()以外的start(),因为它是一个内部函数。为了以后访问它,您需要公开一些方法,方法是将一个外部变量设置为该函数,或者将其移出start()之外,让start()只调用该函数,而不是定义它,然后立即执行它:
function firstIIFE(param1, param2) {
if (param1 && param2) {
console.log('param1 ',param1, 'param2 ',param2);
return;
}
/* some code done when IIFE originally was self-invoked */
}
(function start() {
/* some code*/
firstIIFE(param1, param2);
/* some code */
}());
function foo() {
firstIIFE(param1, param2);
}(此时您可能不需要称它为firstIIFE(),因为它不再遵循立即调用的函数表达式模式,而是现在只是一个正常的函数调用)。
发布于 2016-01-10 02:12:24
函数表达式的名称对于创建它们的作用域是不可访问的,因此,如果不将对函数的引用存储在变量中,就无法从该作用域调用函数。
但是,将函数存储在变量中而不是声明它们有副作用,即不将函数提升到当前作用域的顶部,这是您很少想要的。
你可以:
(foo = function myNameIsKnownOnlyToMyself() {
...
})();
foo(); // again!如果你真的喜欢你的生活模式,但正如其他人所说,这可能不是解决你的问题的最优雅的方法。
https://stackoverflow.com/questions/34701153
复制相似问题