// JavaScript source code
var foo = (function () {
var o = { bar: "bar" };
return {
bar: function () {
console.log(o.bar);
}
};
})();
foo.bar();

发生了什么事? foo是一个对象吗?它是一个命名函数吗? 这看起来像是一种提供私有数据成员的类概念的可怕方式....
答案 0 :(得分:1)
foo是一个对象。它是返回语句后面的对象。
此代码在这些括号中声明一个函数,然后立即调用它。然后为foo分配函数返回的任何值。
答案 1 :(得分:1)
他们被称为IIFE
的{{3}}
检查此示例使用IIFE的地方https://developer.mozilla.org/en-US/docs/Glossary/IIFE
通常javascript模块都是以模式编写的。
var foo = function () {
var o = { bar: "bar" };
return {
bar: function () {
console.log(o.bar);
}
};
};
foo().bar();
AND
var foo = (function () {
var o = { bar: "bar" };
return {
bar: function () {
console.log(o.bar);
}
};
})();
foo.bar();
类似。