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

时间:2016-04-26 09:42:00

标签: javascript

这是我的代码:

(function() {
    var libby = {};

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

我正在学习创建一个JavaScript库。我在我的html中包含上面的文件并加载页面,库加载,但是当我在控制台中键入libby时,它会抛出错误“libby未定义”。

2 个答案:

答案 0 :(得分:2)

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

var libby = (function () {

    var libby = {};

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

从IIFE返回的值被分配给全局变量libby。请注意,内部libby变量是私有,并且无法在IIFE之外访问。

也可以在全局window对象上添加局部变量。

(function () {

    var libby = {};

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

    window.libby = libby; // Make it global
}());

答案 1 :(得分:1)

这就是你的IIFE关闭的重点。 您的库变量现在不会与其他库中的变量发生冲突。 如果要使用库,则需要在IIFE外部使用变量,以便对库函数进行全局范围访问。

var somePrivateName = (function() {

    var libby= {};

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

现在,您可以使用somePrivateName访问库功能。

 somePrivateName.greet();