Не понимаю этот пример замыкания в JavaScript - PullRequest
0 голосов
/ 25 мая 2018

Я немного растерялся из-за замыканий в этом примере

function f(param){
  var n=function(){ //n is assigned the function that returns param 
    return param; 
  };
  param++; //increments 1 and n keeps a reference to the param 
  return n; 
}
var inner=f(1);
inner();

Я понимаю концепцию замыканий, я просто не понимаю, как это работает в этом примере.

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

In param становится локальной переменной для функции, которая не совпадает с аргументом функции f.Функция f возвращает n, которая является функцией

function f(param) {
  var n = function() { //n is assigned the function that returns param 
    return param;
  };
  param++; // here param become a local variable of the function f
  return n;
}
var inner = f(1);
console.log(inner());
0 голосов
/ 25 мая 2018

Здесь, в этом примере, локальная переменная param заканчивается закрытием этой анонимной функции.Здесь, в этом случае, до тех пор, пока внешняя функция не вернется, она может изменить локальный контекст выполнения, который будет использоваться анонимной функцией при каждом ее выполнении.

0 голосов
/ 25 мая 2018

Давайте посмотрим, что здесь происходит:

Вы вызываете функцию f с аргументом 1 и присваиваете результат внутренней переменной.

Когда вызывается f (1), область действия fимеет 2 переменные (param и n)

Переменная params является переданным аргументом, а n является функцией.

Итак, внутри функции f - переменная n инициализируется функцией, а затемувеличивается, затем возвращается n из функции f.

Эта возвращаемая функция (n) присваивается внутреннему.

при вызове inner возвращает param - который находится в области действия функции nиз-за закрытия.

Надеюсь, что шаги были ясны.

Теперь вы сомневаетесь, как n получил доступ к param ++.Это не так, param ++ уже был выполнен при вызове f (1).Все n имеет только ссылку на значение параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...