有人可以解释这个 javascript 片段吗?
Can somebody explain this javascript fragment?
// JavaScript source code
var foo = (function () {
var o = { bar: "bar" };
return {
bar: function () {
console.log(o.bar);
}
};
})();
foo.bar();
这是怎么回事? foo 是一个对象吗?它是一个命名函数吗?
这看起来像是提供私有数据成员的 class 概念的可怕方式....
foo 是一个对象。它是 return 语句之后的对象。
此代码在这些括号内声明了一个函数,然后立即调用它。然后 foo 被赋予函数 returns.
的任何值
他们被称为IIFE
的https://developer.mozilla.org/en-US/docs/Glossary/IIFE
检查这个使用 IIFE 的示例 http://javascriptissexy.com/understand-javascript-closures-with-ease/
通常javascript个模块写在模式中。
var foo = function () {
var o = { bar: "bar" };
return {
bar: function () {
console.log(o.bar);
}
};
};
foo().bar();
和
var foo = (function () {
var o = { bar: "bar" };
return {
bar: function () {
console.log(o.bar);
}
};
})();
foo.bar();
相似。
// JavaScript source code
var foo = (function () {
var o = { bar: "bar" };
return {
bar: function () {
console.log(o.bar);
}
};
})();
foo.bar();
这是怎么回事? foo 是一个对象吗?它是一个命名函数吗? 这看起来像是提供私有数据成员的 class 概念的可怕方式....
foo 是一个对象。它是 return 语句之后的对象。
此代码在这些括号内声明了一个函数,然后立即调用它。然后 foo 被赋予函数 returns.
的任何值他们被称为IIFE
的https://developer.mozilla.org/en-US/docs/Glossary/IIFE
检查这个使用 IIFE 的示例 http://javascriptissexy.com/understand-javascript-closures-with-ease/
通常javascript个模块写在模式中。
var foo = function () {
var o = { bar: "bar" };
return {
bar: function () {
console.log(o.bar);
}
};
};
foo().bar();
和
var foo = (function () {
var o = { bar: "bar" };
return {
bar: function () {
console.log(o.bar);
}
};
})();
foo.bar();
相似。