2017-02-20 13 views
0
calValue: function (data) { 
      var self = this; 
      var values = data.values; 
      for (var i = 0; i < data.length; i++) { 
        if(data.condition == 0){ 
        (function (values) { 
          for (i = 0; i < values.length; i++) { 
          } 
        })(values) 
        } 
        else{ 
          //do sth else 
        } 
      } 
    } 

Мое понимание каждого funtion имеет свой собственный контекст и переменная, объявляемая внутри него, будет только эффективной внутри. Как и выше фрагмент кода, я ожидаю, что переменная «i» внутри внутреннего цикла for не будет влиять на внешнюю переменную «i». Однако на самом деле это влияет.переменная область видимости в javascript

Не могли бы вы помочь объяснить? Благодарю.

+2

Это потому, что вы не повторно объявляете 'i' во второй внутренней функции, поэтому он использует' i' из внешней функции, а не собственную внутреннюю копию. –

+0

спасибо Даниэль. Это имеет смысл. – connie

ответ

1

С var объявлениями, область охвата находится на уровне function. Такие объявления интерпретируются так, как если бы они появились в самом начале закрывающей функции.

В современных средах JavaScript объявление let позволяет создавать переменные, привязанные к локальным блокам операторов. (Также const для немодифицируемых символов.)

В вашем случае этот внутренний i во вложенной функции просто ссылается на то, что i объявлено снаружи. Изнутри функции вы всегда можете «видеть», но вы не можете «видеть». Вот как работает область действия.

+0

спасибо, pointy. – connie

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