Если вы хотите получить доступ к свойству из IIFE, что вам нужно сделать это свойство доступно путем возврата объект
var first_function = (function(d3, second_function) {
// this function is unavailable to the outer scope
function third_function(param1, param2) {
/* do stuff here */
}
// this object allows us to access part of the inner scope
// by passing us a reference
return {
third_function: third_function
}
}})(d3, second_function);
Интересно, что мы также можем воспользоваться этим, чтобы создать «частные» методы и переменные.
var first_function = (function(d3, second_function) {
// this function is unavailable to the outer scope
function third_function(param1, param2) {
/* do stuff here */
}
var myPrivate = 0; // outer scope cannot access
// this object allows us to access part of the inner scope
// by passing us a reference
return {
third_function: third_function,
getter: function() {
return myPrivate; // now it can, through the getter
}
}
}})(d3, second_function);
Если вы хотите узнать больше о том, как это работает, я предлагаю вам ознакомиться с областями и закрываниями JavaScript.
Обратите внимание, что IIFE ничего не возвращает, и он выполняется немедленно, поэтому в основном 'first_function' является' undefined'? – adeneo
Что вы возвращаете IIFE? Вам нужно вернуть объект, который имеет свойство third_function как свойство, иначе вы не сможете получить к нему доступ. –
Кроме того, вы не можете получить доступ к 'third_function' вне IIFE, это то, что делает закрытие, внутренняя функция недоступна во внешней области, если вы не вернете что-то, чтобы сделать ее доступной. Реальный вопрос становится; почему вы используете IIFE? – adeneo