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

时间:2016-12-16 09:00:39

标签: javascript iife

刚开始学习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     
        }; 
    })();

问题是如何调用此代码?

awesomeSauce("Zorg!"); 

不起作用,也不起作用

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

3 个答案:

答案 0 :(得分:1)

awesomeSauce.checkCode("Zorg!");

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

IIFE的要点是,它将变量和函数范围限定在内,以便无法从外部访问它们(例如privateCheckCodesecretCode仅存在于IIFE内部。

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

答案 1 :(得分: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语句返回的表达式不是代码块。只需通过代码,我猜你会明白

答案 2 :(得分:0)

同意Lucero的回答

  

1)执行IIFE

     

2)执行结果被分配给awesomeSauce

那么执行的结果是什么?

无论函数返回什么,在代码

下面
return { 
    checkCode: privateCheckCode     
};

在这种情况下,它返回一个具有名为" checkCode"的属性的对象。它指的是内部功能" privateCheckCode"。

简而言之,它变成了,

awesomeSauce = { 
    checkCode: privateCheckCode     
};

因此,您可以像awesomeSauce.checkCode("Zorb!");

一样调用您的函数