2016-01-27 2 views
-1

У меня есть две функции. Я вызываю один из другого, а затем пытаюсь получить доступ к переменной в области родительской функции. Это прекрасно работает, как показано в следующем коде яваскрипта:Невозможно получить доступ к переменной родителя из функции в Javascript

var value = "A"; 

function func1() { 
    console.log(this.value); 
    func2(); 
} 

function func2() { 
    console.log(value); 
} 

Вопрос 1: Почему значение не определено в func2, когда упаковка в require.js как this?

Вопрос 2: Почему я должен использовать this.value в func1?

+1

Вы отметили этот [тег: requirejs], но для того, чтобы увидеть, как RequireJS фигурирует в вашей проблеме, вы отправляете читателей за пределы сайта. Вся информация, которая необходима для понимания проблемы, должна быть * в теле вашего вопроса *. – Louis

ответ

1

Вы также можете посмотрите на https://plnkr.co/edit/K7TSOypqKyBQEOqseGqP?p=preview, чтобы увидеть, что значение var доступно из func2.

Я нашел для вас решение: добавить SetValue к problem.js:

function setValue(val) { 
    value = val; 
} 

и сделать его общедоступным:

return {func1: func1, setValue:setValue}; 

и от initialize.js называют его:

problem.setValue("D"); 

Теперь из каждой функции в задаче (func1, func2) вы можете использовать variable. См. Его в моей обновленной ссылке.

Это зависит от области действия var value. Обычно, когда вы помещаете это js в html, область видимости - это окно, а также внутри функции func1.

func 2 также должен работать, так как область видимости также является окном, она просто не работает в связанном примере, потому что там она не загружается непосредственно в окно.

+0

Спасибо, Гавриил. Мое понимание с требованием.js, заключается в том, что каждый модуль (файл) имеет локальные переменные, доступные для других модулей, только путем включения зависимости к этому модулю (define (["problem.js"], function (problem) ...), а затем доступ к ним через параметр, переданный в (проблема). Я хочу, чтобы переменные были приватными для каждого модуля, за исключением этих зависимостей. Невозможно ли вызывать функции таким образом без globals? – Nate

+0

В первом «нерабочем» примере вы можете видеть, что func2 работает и он использует локальное значение модуля. Я думаю, что в вашем примере это работает наоборот. В func1 this.value является локальным модулем. Вы должны использовать this.value также в func2. Значение – Gavriel

+0

должно быть инициализировано initialize.js, строка 4 перед вызовом func1, поэтому не стоит присваивать значение = A уже? Это значение, которое я хочу сохранить. Рассматриваем ли мы два разных экземпляра проблемы.js? – Nate

2

Я думаю, что вы можете ввести в заблуждение два значения.

this.value прибудет это свойство value из this, где this создается с помощью функции. func1()

Теперь ваш var value; не определен, потому что вы никогда не устанавливали для него значение.

  • this.value является собственностью this

  • console.log(value) пытается напечатать значение var value; которое не определено, потому что вы никогда не установить его на что-нибудь

+0

Спасибо, я видел, что забыл инициализировать значение и исправил его. Вы посмотрели мой связанный пример? – Nate

+0

@Nate Я взглянул на него, но я не вижу его сейчас. У вас все еще есть проблемы? – Adjit

+0

Да. В моем связанном примере я не могу установить значение в модуле с именем problem из другого модуля (инициализировать) и получить доступ к значению, установленному в func2. – Nate

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