Использование 'bind' при возврате функции создает замыкание? - PullRequest
0 голосов
/ 06 мая 2018

мой вопрос касается следующего примера:

function inner(x){
  return x;
}

function outer(fn){
  var x = 'I just made a closure!!!'
  return  fn.bind(this, x)
}

var y = outer(inner)
    y()

когда вызывается y(), есть ли у него замыкание над x из-за bind? Я запутался, потому что у него есть доступ к внутренней переменной функции outer, но, тем не менее, он объявлен вне области действия outer

Ответы [ 2 ]

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

когда вызывается y (), закрывается ли он по x из-за привязки?

Нет, вызов bind для функции возвращает связанную функцию . Эта связанная функция может, однако, закрыть функцию и аргументы, но это зависит от реализации. Реализация с замыканием будет выглядеть так:

 Function.prototype.bind = function(context, ...args) {
   const bound = this;
   return function(...args2) { // the closure
     bound.call(context, ...args, ...args2);
   };
 };
0 голосов
/ 06 мая 2018

когда вызывается y (), закрывается ли он по x из-за привязки?

Не совсем.

Значение x передается в качестве аргумента bind.

Рассмотрим грубое приближение того, как может выглядеть реализация функции bind:

function bind(this_value, first_argument_value) {
    return function () {
        // Call the original function with arguments and context
    }
}

Закрыт first_argument_value, а не x.

...