我无法访问 IIFE 中定义的变量

问题描述 投票:0回答:2

这是我的代码:

(function() {
    var libby = {};

    libby.greet = function() {
        console.log('heello');
    }
    return libby;
})();

我正在学习创建一个 JavaScript 库。我将上面的文件包含在我的 html 中并加载页面,库加载,但是当我在控制台中输入

libby
时,它会抛出错误“libby 未定义”。

javascript
2个回答
2
投票

您必须在变量中获取返回值。

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
}());

2
投票

这就是 IIFE 闭包的全部意义。 您的库变量现在不会与其他库中的变量发生冲突。 如果你想使用你的库,你需要一个 IIFE 之外的变量来提供对库函数的全局范围访问。

var somePrivateName = (function() {

  var libby= {};

  libby.greet = function() {        
    console.log('heello');  
  }

  return libby;

})();

现在您可以使用

somePrivateName
访问库功能。

 somePrivateName.greet();
© www.soinside.com 2019 - 2024. All rights reserved.