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

How do I call a function within an IIFE expression

刚开始学习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!");
awesomeSauce.checkCode("Zorg!");

IIFE returns 具有 checkCode 属性 的对象,即 属性 是(私有)函数。

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

将返回的对象视为 "export" 所选值或功能。

同意Lucero的回答

1) The IIFE gets executed

2) result of the execution gets assigned to awesomeSauce

那么执行的结果是什么呢?

函数返回的内容,代码下方

return { 
    checkCode: privateCheckCode     
};

在这种情况下,它 returns 一个对象 属性 名为 "checkCode",它引用内部函数 "privateCheckCode"。

简而言之,它变成了,

awesomeSauce = { 
    checkCode: privateCheckCode     
};

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

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 语句 return 表达式而不是代码块。看一下代码我想你会明白

你可以用console.log(awesomeSauce.checkCode('Zorb!'));

来调用它

作为 iife returns 一个以 checkCode 键和 privateCheckCode 作为值的对象。