刚开始学习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!");
答案 0 :(得分:1)
awesomeSauce.checkCode("Zorg!");
IIFE返回一个具有checkCode
属性的对象,该属性是(私有)函数。
IIFE的要点是,它将变量和函数范围限定在内,以便无法从外部访问它们(例如privateCheckCode
和secretCode
仅存在于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!");