如何在IIFE表达式中调用一个函数?

4

我刚开始学习 JavaScript,使用的书籍是《JavaScript入门指南》。问题来源于书中一个例子:

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!");
4个回答

4
awesomeSauce.checkCode("Zorg!");

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

IIFE的重点在于将变量和函数限定在内部作用域中,以便它们不会从外部访问(例如,privateCheckCodesecretCode仅存在于IIFE内部)。

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


1

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语句返回的是表达式而不是代码块。只需仔细阅读代码,你就会明白。


0

同意Lucero的答案

1)IIFE被执行

2)执行结果被分配给awesomeSauce

那么执行的结果是什么?

它取决于函数返回的内容,以下是代码:

return { 
    checkCode: privateCheckCode     
};

在这种情况下,它返回一个具有名为"checkCode"的属性的对象,该属性指向内部函数"privateCheckCode"。
简而言之,它变成了,
awesomeSauce = { 
    checkCode: privateCheckCode     
};

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

请阅读此链接中的“如何访问对象上的属性”主题:http://javascriptissexy.com/javascript-objects-in-detail/ - Flying Gambit

0

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

因为 IIFE 返回一个具有 checkCode 键和 privateCheckCode 值的对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接