2015-05-19 3 views
0

У меня есть этот ключ в объект JavaScript {}Неопределенное значение в контуре Foreach

resolve: function() { 

     var result = this.initialValue; 

     console.log('initial value:',result); // 5 

     this.functions.forEach(function (element, index) { 

      console.log('index:', index, 'result:',result); //index=0, result=undefined :(
      var result = element.func(result); 

     }); 

    } 

результат определяется вне цикла (со значением Number (5)). Но при первой итерации цикла переменная результата становится неопределенной. Есть ли что-то о JS, которого я не знаю?

Является ли var result = element.func(result); вызовом как-то переопределяющим result странным способом? Нет, этого не может быть, потому что этот вызов приходит после первого входа в систему result.

в этом случае element.func() это просто переменная, представляющая console.log()

так element.func(result) должно быть эквивалентно console.log(result), но это распечатка не определено вместо 5.

не знаю, что это продолжается.

+0

возможно дубликат [Какова область переменных в JavaScript?] (Http://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in-javascript) – Mathletics

ответ

3

Внутри функции есть дублирующее объявление переменной. Он регистрирует эту переменную до ее определения.

Попытайтесь избавиться от «var» и зарегистрируйте его после переназначения.

resolve: function() { 

     var result = this.initialValue; 

     console.log('initial value:',result); // 5 

     this.functions.forEach(function (element, index) { 


      result = element.func(result); 
      console.log('index:', index, 'result:',result); 

     }); 

    } 
2

в вашем console.log, result относится к локальной переменной result, так что не определено (как вы определить его на следующей строке.)

+1

Мне просто нужно удалить ключевое слово var, и мы хорошо благодарим –

+1

, почему downvote? – Mathletics

2

Вы повторно назначая result переменную внутри цикла forEach.

var result = element.func(result);

Таким образом, когда цикл продолжается после того, как в первый раз result будет element.func(result) и не this.initialValue

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