2017-01-15 6 views
0

Допустим, у меня есть этот код:Получить ссылку на локальную область видимости из функции

// somewhere else 
var outFn = (() => { 
    var local = 5; 
    var fn =() => { console.log(local); }; 
    return fn; 
})(); 

// I have a reference to outFn 
outFn(); // prints 5 

Как получить ссылку на локальную область видимости outFn «s, то есть, как получить ссылку на local переменных используя мою ссылку на outFn?

+1

Вы не можете ...... – Oriol

+0

Yah, сторона dev (lib в вашем случае) не хочет давать стороне клиента (ваш код) доступ к внутренней структуре данных, является Причина IIFE используется вместо объектного литерала, моя догадка;) – Xlee

+0

Я согласен :) Я не должен. Но есть ли способ взломать его? : P Просто потому, что я не должен не значит, что не могу;) –

ответ

0

Не писать последние круглые скобки:

var outFn = (() => { 
    var local = 5; 
    var fn =() => { console.log(local); }; 
    return fn; 
}) //(); <-- No need those parentheses 

Тогда:

var localFn= outFn(); 
    localFn() ; // prints 5 

Если вы хотите получить доступ и к local переменной также, прикрепить его к fn как следующее:

var outFn = (() => { 
    var fn =() => { console.log(fn.local); }; 
    fn.local = 5; 
    return fn; 
}); 

Теперь вы можете прочитать local:

var localFn= outFn(); 
    localFn.local ; // ===5 
+0

Но что, если я не могу изменить код «где-то еще»? То есть, ну где-то еще. У меня только есть ссылка outFn сейчас ... –

+0

@LuanNico Вы хотите сказать, что у вас есть ссылка на внешний сервер? Просто загрузите измененный код на свой сайт. – Oriol

+0

Я имею в виду, что я пишу lib, который должен сделать это для данного клиентского кода. Ничего подобного rs Просто не имеют доступа к биту объявления кода, вот и все. –

 Смежные вопросы

  • Нет связанных вопросов^_^