使用'绑定'返回函数时会创建一个闭包吗?

时间:2018-05-06 11:33:08

标签: javascript closures bind

我的问题是关于以下示例:

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 :(得分:2)

  

当调用y()时,是否因为绑定而在x上有一个闭包?

不,在函数上调用bind会返回绑定函数。但是,这个绑定函数可能会关闭函数和参数,但这取决于实现。具有闭包的实现看起来像:

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

答案 1 :(得分: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