这是我的代码:
(function() {
var libby = {};
libby.greet = function() {
console.log('heello');
}
return libby;
})();
我正在学习创建一个 JavaScript 库。我将上面的文件包含在我的 html 中并加载页面,库加载,但是当我在控制台中输入
libby
时,它会抛出错误“libby 未定义”。
您必须在变量中获取返回值。
var libby = (function () {
var libby = {};
libby.greet = function () {
console.log('heello');
};
return libby;
}());
从 IIFE 返回的值被分配给全局变量
libby
。请注意,内部 libby
变量是 private 并且无法在 IIFE 外部访问。
局部变量也可以添加到全局
window
对象上。
(function () {
var libby = {};
libby.greet = function () {
console.log('heello');
};
window.libby = libby; // Make it global
}());
这就是 IIFE 闭包的全部意义。 您的库变量现在不会与其他库中的变量发生冲突。 如果你想使用你的库,你需要一个 IIFE 之外的变量来提供对库函数的全局范围访问。
var somePrivateName = (function() {
var libby= {};
libby.greet = function() {
console.log('heello');
}
return libby;
})();
现在您可以使用
somePrivateName
访问库功能。
somePrivateName.greet();