Использование 'bind' при возврате функции создает замыкание?

1

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

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

Теги:
closures
bind

2 ответа

2
Лучший ответ

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

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

 Function.prototype.bind = function(context, ...args) {
   const bound = this;
   return function(...args2) { // the closure
     bound.call(context, ...args, ...args2);
   };
 };
1

когда 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню