【问题标题】:How do I call a function within an IIFE expression如何在 IIFE 表达式中调用函数
【发布时间】:2016-12-16 09:00:38
【问题描述】:

刚开始学习 js 并使用 Javascirpt an Absolute Beginner's Guide 一书。问题来自书中的一个例子:

var awesomeSauce = (
    function () {     
        var secretCode = "Zorb!";
        function privateCheckCode(code) { 
            if (secretCode == code) { 
                alert("You are awesome!");   
            } else { 
                alert("Try again!");   
            }     
        }
    // the public method we want to return     
        return { 
            checkCode: privateCheckCode     
        }; 
    })();

问题是我该如何调用这段代码?

awesomeSauce("Zorg!"); 

没有用,也没有

awesomeSauce().privateCheckCode("Zorg!");

【问题讨论】:

    标签: javascript iife


    【解决方案1】:
    awesomeSauce.checkCode("Zorg!");
    

    IIFE 返回一个具有checkCode 属性的对象,该属性是(私有)函数。

    IIFE 的重点在于,它限定了变量和函数的范围,因此它们不能从外部访问(例如,privateCheckCodesecretCode 仅存在于 IIFE 内部)。

    将返回的对象视为所选值或功能的“导出”。

    【讨论】:

      【解决方案2】:

      var awesomeSauce = (
          function () {     
              var secretCode = "Zorb!";
              function privateCheckCode(code) { 
                  if (secretCode == code) { 
                      alert("You are awesome!");   
                  } else { 
                      alert("Try again!");   
                  }     
              }
          // the public method we want to return
              return ( 
                  privateCheckCode     
              ); 
          })();
      awesomeSauce('Zorb!')

      嘿,我知道的不多,但我碰巧解决了这个问题:return 语句返回一个表达式而不是代码块。看一下代码我猜你会明白的

      【讨论】:

        【解决方案3】:

        同意卢塞罗的回答

        1) IIFE 被执行

        2) 执行结果分配给 awesomeSauce

        那么执行的结果是什么?

        无论函数返回什么,代码如下

        return { 
            checkCode: privateCheckCode     
        };
        

        在这种情况下,它返回一个具有名为“checkCode”的属性的对象,该属性引用内部函数“privateCheckCode”。

        简而言之,它变成了,

        awesomeSauce = { 
            checkCode: privateCheckCode     
        };
        

        因此,您可以像这样调用您的函数awesomeSauce.checkCode("Zorb!");

        【讨论】:

        【解决方案4】:

        您可以使用console.log(awesomeSauce.checkCode('Zorb!')); 调用它

        因为 iife 返回一个以 checkCode 键和 privateCheckCode 作为值的对象。

        【讨论】:

          猜你喜欢
          • 2016-05-04
          • 2012-12-28
          • 1970-01-01
          • 2017-08-30
          • 2023-04-04
          • 2012-09-02
          • 1970-01-01
          • 1970-01-01
          • 2014-05-23
          相关资源
          最近更新 更多