@Shaidulint

Как работает окружение переменных в Javascript?

Привет всем, объясните пожалуйста - никак не пойму. Почему в следующем коде, внутри метода Method переменные видны только те, которые я как то использую в теле метода? Если я их не использую, то они не определены? (В режиме отладки.)
function TestObj(Arg1, Arg2) {
      var arg3 = 567;
      this.Method = function() {
         alert(Arg1);    //   В режиме отладки, тут переменная Arg1 видна, а переменные Arg2 и arg3 не видны. Почему так?
      }
   }
   var o = new TestObj('Hello', 55);
   o.Method();   //Выведет Hello
  • Вопрос задан
  • 536 просмотров
Решения вопроса 1
Это над вами сборщик мусора издевается и движок V8
Так как Arg2 и arg3 после исполнения функции-конструктора TestObj более нигде не достижимы, то GC их быстренько подчистит.
Удаленная переменная после сборки мусора будет недоступна в отладчике хрома. Но в FF она будет видна

Firefox
30563faa489c423da6904ef4f1b1cdc5.png
А хром фигу показывает)

Ссылка по теме https://learn.javascript.ru/memory-management#%D0%...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Всё прекрасно видно, определено и работает: https://jsfiddle.net/1rjvyp33/
Ответ написан
@vshvydky
UPD:
function TestObj(Arg1, Arg2, Arg3) {
  this.Arg1 = Arg1;
  this.Arg2 = Arg2;
  this._Arg3 = Arg3;
  this.Method = function() {
    debugger;
    console.log(Arg1);
  }
}
var o = new TestObj('Hello', 55);
o.Method();

37a9ff2e3acd49669fe3113733680c4a.png
Да действительно чистильщик работает, да это и правильно. Если хотите явно получать значения и ничего с ними не делать, можно использовать присваивание в this.nameX и видеть эти значения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы