首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用参数“稍后”调用IIFE

用参数“稍后”调用IIFE
EN

Stack Overflow用户
提问于 2016-01-10 01:55:02
回答 2查看 1.5K关注 0票数 2

我在我的代码中有一个生命,在那里没有其他的IIFE。他们都有名字(所以他们不是匿名的)。我想以后再调用一些生命(是的,他们一开始就做他们的工作,但我希望以后再用),通过其他的功能。例如:

代码语言:javascript
复制
(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)生命?因为我希望这个函数能够使用param1param2 (我在调用这些生命之后创建的)做一些事情?目前,我得到了错误,例如:未定义ReferenceError: param1未定义

EN

回答 2

Stack Overflow用户

发布于 2016-01-10 02:15:18

按照编写代码的方式,您将无法访问firstIIFE()以外的start(),因为它是一个内部函数。为了以后访问它,您需要公开一些方法,方法是将一个外部变量设置为该函数,或者将其移出start()之外,让start()只调用该函数,而不是定义它,然后立即执行它:

代码语言:javascript
复制
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(),因为它不再遵循立即调用的函数表达式模式,而是现在只是一个正常的函数调用)。

票数 3
EN

Stack Overflow用户

发布于 2016-01-10 02:12:24

函数表达式的名称对于创建它们的作用域是不可访问的,因此,如果不将对函数的引用存储在变量中,就无法从该作用域调用函数。

但是,将函数存储在变量中而不是声明它们有副作用,即不将函数提升到当前作用域的顶部,这是您很少想要的。

你可以:

代码语言:javascript
复制
(foo = function myNameIsKnownOnlyToMyself() {
     ...
 })();

foo(); // again!

如果你真的喜欢你的生活模式,但正如其他人所说,这可能不是解决你的问题的最优雅的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34701153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档