2016-04-26 2 views
-1

Это мой код:я не могу получить доступ к переменной, определенной внутри IIFE

(function() { 
    var libby = {}; 

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

Я учусь, чтобы создать библиотеку JavaScript. Я включаю над файлом в свой html и загружаю страницу, загружает библиотеку, но когда я ввожу libby в консоль, он выдает ошибку «libby не определен».

ответ

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

Thats. верный!! прикрепление его к объекту окна работает просто отлично :) –

1

В этом весь пункт вашего закрытия IIFE. Теперь переменные библиотеки не будут сталкиваться с переменными из других библиотек. Если вы хотите использовать свою библиотеку, вам нужна переменная вне IIFE, которая предоставляет глобальную возможность доступа к библиотечным функциям.

var somePrivateName = (function() { 

    var libby= {}; 

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

Теперь вы можете использовать somePrivateName для доступа к функциям библиотеки.

somePrivateName.greet(); 
Смежные вопросы