繁体   English   中英

如何在 IIFE 表达式中调用 function

[英]How do I call a function within an IIFE expression

刚开始学习 js 并使用 Javascirpt 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     
        }; 
    })();

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

awesomeSauce("Zorg!"); 

不起作用,也不起作用

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

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

IIFE的要点是,此操作将变量和函数的作用域限定在其中,以使它们无法从外部访问(例如, privateCheckCodesecretCode仅存在于IIFE内部)。

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

 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语句返回一个表达式而不是代码块。 只是通过代码,我想你会明白的

同意卢塞罗的回答

1)IIFE被执行

2)执行结果分配给awesomeSauce

那么执行的结果是什么?

代码下方是返回的任何函数

return { 
    checkCode: privateCheckCode     
};

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

简而言之,它变成了

awesomeSauce = { 
    checkCode: privateCheckCode     
};

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

你可以用console.log(awesomeSauce.checkCode('Zorb;'));调用它。

因为 iife 返回一个 object,它具有 checkCode 键和 privateCheckCode 作为值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM