@frilix
Иногда "творю"

Область видимости и замыкания?

Прохожу курс по Js тут, но найти ответы на ниже приведенные вопросы не могу(или недостаточно знаний чтоб понять, что это ответ)

Как использовать замыкание для того, чтобы "закрыть" значение внутри функции?
Как упрощает жизнь #bind в разрезе замыканий и областей видимости?
  • Вопрос задан
  • 471 просмотр
Решения вопроса 2
riky
@riky
Laravel
не закрытая i
for (var i = 0; i < 10; i++) {
   setTimeout(function() {  
      console.log(i); // выведет 10 раз в консоли число 10, почему? 
   }, 100);
}


а здесь мы закрываем i в замыкание
for (var i = 0; i < 10; i++) {
  (function(closure_i){
    setTimeout(function() {  
      console.log(closure_i); // выведет числа от 0 до 9
    }, 100);
  })( i );
}
Ответ написан
Комментировать
VIKINGVyksa
@VIKINGVyksa
front-end developer
Ну с замыканиями всё просто

Допустим у нас есть функция которая читает строки, которая в свою очередь читает символы.
function readString(){
 var string;
 string = readChar();
}

function readChar(){
   return 'a';
}

В таком коде у нас есть 2 области видимости, тк. они создаються функциями и функция readChar ничего не знает о переменной string;

Теперь мы "закроем" эту переменную внутри замыкания.

function readString(){
 var string;

  readChar();

   function readChar(){
    string = 'a';   
   }
}


Теперь переменная string есть в замыкании. Когда мы пытаемся обратится к какой-то переменной из функции(scope) то она ищеться снача в нём, если не нашлась тут то ищеться во внешней области видимости, а внешней для функции readChar будет функция readString и в неё есть переменная string. Мы её нашли, если её там не было бы, то её поиск проходил бы вплоть до объекта window.

На счёт второго вопроса ответ есть тут
Это лучший русскоязычный ресурс по javascript
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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